سیگنال - فرمان لینوکس / یونیکس

لینوکس از هر دو سیگنال قابل اعتماد 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 از سه سیگنال در زمان واقعی استفاده می کند.)

عمل پیش فرض برای یک سیگنال زمان واقعی غیرفعال، فرایند دریافت است.

سیگنال های زمان واقعی توسط موارد زیر تشخیص داده می شوند:

  1. چند نمونه از سیگنال های زمان واقعی می تواند در صف باشد. در مقابل، اگر چند نمونه از یک سیگنال استاندارد تحویل داده شود در حالی که این سیگنال در حال حاضر مسدود شده است، تنها یک نمونه در صف قرار دارد.
  2. اگر سیگنال با استفاده از sigqueue (2) ارسال شود، یک مقدار همراه (یا یک عدد صحیح یا یک نشانگر) با سیگنال ارسال می شود. اگر فرایند دریافت یک handler برای این سیگنال را با استفاده از پرچم SA_SIGACTION برای sigaction (2) ایجاد می کند، می تواند این داده ها را از طریق فیلد si_value از ساختار siginfo_t به عنوان دومین آرگومان به handler منتقل کند. علاوه بر این، fields of si_pid و si_uid از این ساختار می تواند برای بدست آوردن شناسه PID و واقعی کاربر فرایند ارسال سیگنال استفاده شود.
  3. سیگنال های زمان واقعی در یک سفارش تضمین شده تحویل داده می شود. سیگنال های زمان واقعی چندگانه همان نوع در سفارش ارسال می شوند. اگر سیگنال های زمان واقعی مختلف به یک فرآیند ارسال شوند، آنها با کمترین سیگنال شروع می شوند. (به عنوان مثال، سیگنال های کم تعداد دارای بالاترین اولویت هستند).

اگر هر دو سیگنال استاندارد و زمان واقعی برای یک پردازش در انتظار باشد، POSIX آن را نامشخص می کند که اولین بار تحویل داده می شود. لینوکس، مانند بسیاری از پیاده سازی های دیگر، در این مورد اولویت بیشتری نسبت به سیگنال های استاندارد دارد.

با توجه به POSIX، یک پیاده سازی بایستی حداقل _POSIX_SIGQUEUE_MAX (32) سیگنال های زمان واقعی را به یک فرآیند به صف برگرداند. با این حال، به جای قرار دادن محدودیت در هر فرایند، لینوکس یک محدودیت تمام عیار در تعداد سیگنال های خط در صف را برای تمام فرآیندها اعمال می کند.

این محدودیت را می توان مشاهده کرد (و با امتیاز) از طریق فایل / proc / sys / kernel / rtsig-max تغییر کرد . یک فایل مرتبط، / proc / sys / kernel / rtsig-max ، می تواند برای پیدا کردن چندین سیگنال زمان واقعی در صف استفاده شود.

سازگار با

POSIX.1

مهم: از دستور man ( ٪ man ) برای دیدن نحوه استفاده از دستور در رایانه خاص خود استفاده کنید.