لینوکس از هر دو سیگنال قابل اعتماد POSIX (از این پس "سیگنال های استاندارد") و سیگنال های زمان واقعی POSIX پشتیبانی می کند.
سیگنال های استاندارد
لینوکس پشتیبانی از سیگنال های استاندارد ذکر شده در زیر است. شماره های سیگنال چندگانه معماری هستند، همانطور که در ستون "Value" نشان داده شده است. (از کجا سه مقدار داده می شود، اولین اول برای آلفا و sparc، وسط برای i386، ppc و sh و برای mips برای آخرین ارجاع است.
A - نشان می دهد که یک سیگنال در معماری مربوطه وجود ندارد.)
ورودی ها در ستون "Action" جدول عملکرد پیش فرض برای سیگنال را مشخص می کند به شرح زیر:
مدت، اصطلاح
اقدام پیش فرض این است که روند را خاتمه دهد.
Ign
عملکرد پیش فرض این است که سیگنال را نادیده بگیریم.
هسته
عملیات پیش فرض این است که خاتمه روند و تخلیه هسته.
متوقف کردن
اقدام پیش فرض برای متوقف کردن روند است.
ابتدا سیگنال های توصیف شده در استاندارد اصلی POSIX.1.
سیگنال | ارزش | عمل | اظهار نظر |
یا مرگ فرایند کنترل | |||
SIGINT | 2 | مدت، اصطلاح | قطع از صفحه کلید |
SIGQUIT | 3 | هسته | از صفحه کلید خارج شوید |
SIGILL | 4 | هسته | دستورالعمل غیرقانونی |
SIGABRT | 6 | هسته | قطع سیگنال از قطع (3) |
SIGFPE | 8 | هسته | استثناء شناور |
SIGKILL | 9 | مدت، اصطلاح | سیگنال کشتن |
SIGSEGV | 11 | هسته | مرجع حافظه نامعتبر است |
SIGPIPE | 13 | مدت، اصطلاح | لوله شکسته: به لوله با هیچ خواننده نوشتید |
SIGALRM | 14 | مدت، اصطلاح | سیگنال تایمر از زنگ (2) |
SIGTERM | 15 | مدت، اصطلاح | سیگنال خاتمه دادن |
SIGUSR1 | 30،10،16 | مدت، اصطلاح | سیگنال تعریف شده توسط کاربر 1 |
SIGUSR2 | 31،12،17 | مدت، اصطلاح | سیگنال تعریف شده توسط کاربر 2 |
SIGCHLD | 20،17،18 | Ign | کودک متوقف شد یا متوقف شد |
SIGCONT | 19،18،25 | ادامه دهید اگر متوقف شد | |
SIGSTOP | 17،19،23 | متوقف کردن | توقف روند |
SIGTSTP | 18،20،24 | متوقف کردن | توقف در Tty تایپ کنید |
SIGTTIN | 21،21،26 | متوقف کردن | ورودی tty برای روند پس زمینه |
SIGTTOU | 22،22،27 | متوقف کردن | خروجی tty برای فرایند پس زمینه |
سیگنال های SIGKILL و SIGSTOP نمی توانند گرفتار، مسدود شده یا نادیده گرفته شوند.
بعد سیگنال ها در استاندارد POSIX.1 نیست، اما در SUSv2 و SUSv3 / POSIX 1003.1-2001 شرح داده شده است.
سیگنال | ارزش | عمل | اظهار نظر |
SIGPOLL | مدت، اصطلاح | رویداد قابل ملاحظه (Sys V). مترادف SIGIO | |
SIGPROF | 27،27،29 | مدت، اصطلاح | تایمر پروفایل منقضی شده است |
SIGSYS | 12، -، 12 | هسته | استدلال بد برای روال (SVID) |
SIGTRAP | 5 | هسته | تله ردیابی / توقف نقطه |
SIGURG | 16،23،21 | Ign | شرایط اضطراری در سوکت (4.2 BSD) |
SIGVTALRM | 26،26،28 | مدت، اصطلاح | ساعت زنگدار مجازی (4.2 BSD) |
SIGXCPU | 24،24،30 | هسته | محدودیت زمان پردازشگر (4.2 BSD) |
SIGXFSZ | 25،25،31 | هسته | محدودیت اندازه فایل بیش از (4.2 BSD) |
به بالا و از جمله لینوکس 2.2، رفتار پیش فرض SIGSYS ، SIGXCPU ، SIGXFSZ و (در معماری های غیر SPARC و MIPS) SIGBUS برای خاتمه دادن به فرایند (بدون خرد شدن هسته) بود. (در بعضی از یونیسهای دیگر اقدام پیش فرض برای SIGXCPU و SIGXFSZ این است که روند را بدون خنک شدن هسته متوقف سازد.) لینوکس 2.4 مطابق با نیازهای POSIX 1003.1-2001 برای این سیگنالها است، فرآیند را با خرد شدن هسته متوقف می کند.
بعدی دیگر سیگنال های دیگر.
سیگنال | ارزش | عمل | اظهار نظر |
SIGEMT | 7، -، 7 | مدت، اصطلاح | |
SIGSTKFLT | -، 16، - | مدت، اصطلاح | گسل پشته در coprocessor (استفاده نشده) |
SIGIO | 23،29،22 | مدت، اصطلاح | در حال حاضر I / O (4.2 BSD) |
SIGCLD | -، -، 18 | Ign | مترادف SIGCHLD |
SIGPWR | 29،30،19 | مدت، اصطلاح | قطع برق (سیستم V) |
SIGINFO | 29، -، - | مترادف SIGPWR | |
SIGLOST | -، -، - | مدت، اصطلاح | قفل فایل از دست رفته است |
SIGWINCH | 28،28،20 | Ign | سیگنال تغییر اندازه پنجره (4.3 BSD، Sun) |
SIGUNUSED | -، 31، - | مدت، اصطلاح | سیگنال استفاده نشده (خواهد شد SIGSYS) |
(سیگنال 29 SIGINFO / SIGPWR است در یک آلفا اما SIGLOST در sparc.)
SIGEMT در POSIX 1003.1-2001 مشخص نشده است، اما هرگز در بیشتر یونیکس های دیگر ظاهر نمی شود، جایی که عمل پیش فرض آن به طور معمول برای خاتمه دادن روند با یک برنامه ریزی هسته ای است.
SIGPWR (که در POSIX 1003.1-2001 مشخص نشده است) به طور پیش فرض بر روی Unices دیگر که در آن ظاهر می شود، به طور پیش فرض نادیده گرفته می شود.
SIGIO (که در POSIX 1003.1-2001 مشخص نشده است) به طور پیش فرض بر روی چندین یونیس دیگر نادیده گرفته می شود.
سیگنال های زمان واقعی
لینوکس سیگنال های زمان واقعی را در اصل در پسوندهای زمانبندی POSIX.4 تعریف می کند (و در حال حاضر در POSIX 1003.1-2001 نیز موجود است). لینوکس 32 سیگنال زمان واقعی را دارد که از 32 ( SIGRTMIN ) تا 63 ( SIGRTMAX ) شماره گذاری شده است. (برنامه ها همیشه باید به سیگنال های زمان واقعی با استفاده از نشانه SIGRTMIN + n مراجعه کنند، زیرا دامنه های سیگنال های زمان واقعی در سراسر یونیس ها متفاوت است.)
بر خلاف سیگنال های استاندارد، سیگنال های زمان واقعی هیچ معنایی از پیش تعریف نشده ندارند: مجموعه ای از سیگنال های زمان واقعی می تواند برای اهداف تعریف شده کاربردی استفاده شود. (توجه داشته باشید، اما اجرای LinuxThreads از سه سیگنال در زمان واقعی استفاده می کند.)
عمل پیش فرض برای یک سیگنال زمان واقعی غیرفعال، فرایند دریافت است.
سیگنال های زمان واقعی توسط موارد زیر تشخیص داده می شوند:
- چند نمونه از سیگنال های زمان واقعی می تواند در صف باشد. در مقابل، اگر چند نمونه از یک سیگنال استاندارد تحویل داده شود در حالی که این سیگنال در حال حاضر مسدود شده است، تنها یک نمونه در صف قرار دارد.
- اگر سیگنال با استفاده از sigqueue (2) ارسال شود، یک مقدار همراه (یا یک عدد صحیح یا یک نشانگر) با سیگنال ارسال می شود. اگر فرایند دریافت یک handler برای این سیگنال را با استفاده از پرچم SA_SIGACTION برای sigaction (2) ایجاد می کند، می تواند این داده ها را از طریق فیلد si_value از ساختار siginfo_t به عنوان دومین آرگومان به handler منتقل کند. علاوه بر این، fields of si_pid و si_uid از این ساختار می تواند برای بدست آوردن شناسه PID و واقعی کاربر فرایند ارسال سیگنال استفاده شود.
- سیگنال های زمان واقعی در یک سفارش تضمین شده تحویل داده می شود. سیگنال های زمان واقعی چندگانه همان نوع در سفارش ارسال می شوند. اگر سیگنال های زمان واقعی مختلف به یک فرآیند ارسال شوند، آنها با کمترین سیگنال شروع می شوند. (به عنوان مثال، سیگنال های کم تعداد دارای بالاترین اولویت هستند).
اگر هر دو سیگنال استاندارد و زمان واقعی برای یک پردازش در انتظار باشد، POSIX آن را نامشخص می کند که اولین بار تحویل داده می شود. لینوکس، مانند بسیاری از پیاده سازی های دیگر، در این مورد اولویت بیشتری نسبت به سیگنال های استاندارد دارد.
با توجه به POSIX، یک پیاده سازی بایستی حداقل _POSIX_SIGQUEUE_MAX (32) سیگنال های زمان واقعی را به یک فرآیند به صف برگرداند. با این حال، به جای قرار دادن محدودیت در هر فرایند، لینوکس یک محدودیت تمام عیار در تعداد سیگنال های خط در صف را برای تمام فرآیندها اعمال می کند.
این محدودیت را می توان مشاهده کرد (و با امتیاز) از طریق فایل / proc / sys / kernel / rtsig-max تغییر کرد . یک فایل مرتبط، / proc / sys / kernel / rtsig-max ، می تواند برای پیدا کردن چندین سیگنال زمان واقعی در صف استفاده شود.
سازگار با
POSIX.1
مهم: از دستور man ( ٪ man ) برای دیدن نحوه استفاده از دستور در رایانه خاص خود استفاده کنید.