ارسال سیگنال به فرآیندهای با kill
La کشتن دستور برای ارسال سیگنال به برنامه ها استفاده می شود. رایج ترین نحو آن به این صورت است:
کشتن [-سیگنال] PID...
کشتن [-سیگنال] PID...
اگر هیچ سیگنالی در خط فرمان مشخص نشده باشد، مدت سیگنال (خاتمه) به طور پیش فرض ارسال می شود. در کشتن دستور اغلب برای ارسال سیگنال های زیر استفاده می شود:
جدول 10-4: سیگنال های رایج
شماره | نام | معنی |
1 | HUP | قطع کردن. این بقایای روزهای خوب قدیمی است که پایانه ها به ریموت متصل می شدند |
کامپیوترهایی با خطوط تلفن و مودم. این سیگنال برای نشان دادن اینکه ترمینال کنترل کننده "قطع" شده است به برنامه ها استفاده می شود. اثر این سیگنال را می توان با بستن یک جلسه ترمینال نشان داد. برنامه پیش زمینه در حال اجرا در ترمینال سیگنال ارسال می شود و خاتمه می یابد. | ||
این سیگنال همچنین توسط بسیاری از برنامه های دیمون برای ایجاد یک مقدار اولیه مجدد استفاده می شود. این بدان معنی است که وقتی یک دیمون این سیگنال را ارسال می کند، دوباره راه اندازی می شود و فایل پیکربندی خود را دوباره می خواند. وب سرور آپاچی نمونه ای از دیمون است که از آن استفاده می کند HUP از این طریق سیگنال دهید | ||
2 | INT | قطع کنید. عملکرد مشابهی را انجام می دهد Ctrl-c کلید ارسال شده از ترمینال معمولاً یک برنامه را خاتمه می دهد. |
9 | بکش | بکش این سیگنال خاص است. در حالی که برنامه ها ممکن است تصمیم بگیرند سیگنال های ارسال شده به آنها را به روش های مختلف مدیریت کنند، از جمله نادیده گرفتن همه آنها با هم، بکش سیگنال هرگز در واقع به برنامه هدف ارسال نمی شود. در عوض، هسته بلافاصله فرآیند را خاتمه می دهد. هنگامی که یک فرآیند به این روش خاتمه می یابد، هیچ فرصتی به آن داده نمی شود که پس از خود "پاکسازی" یا ذخیره کار خود را انجام دهد. به همین دلیل، بکش سیگنال تنها زمانی باید به عنوان آخرین راه حل مورد استفاده قرار گیرد که سایر سیگنال های پایان کار با شکست مواجه شوند. |
15 | مدت | خاتمه دادن. این سیگنال پیش فرض ارسال شده توسط کشتن فرمان اگر یک برنامه هنوز به اندازه کافی "زنده" برای دریافت سیگنال باشد، خاتمه می یابد. |
18 | حساب | ادامه هید. این یک فرآیند را پس از a بازیابی می کند STOP سیگنال قرار دارند. |
19 | STOP | متوقف کردن. این سیگنال باعث می شود که یک فرآیند بدون پایان متوقف شود. مانند بکش سیگنال، به فرآیند هدف ارسال نمی شود، و بنابراین نمی توان آن را نادیده گرفت. |
بیایید امتحان کنیم کشتن فرمان:
[me@linuxbox ~]$ xlogo &
1
[me@linuxbox ~]$ کشتن -1 13546
[1]+ Xlogo Hangup
[me@linuxbox ~]$ xlogo &
1
[me@linuxbox ~]$ کشتن -1 13546
[1]+ Xlogo Hangup
در این مثال، ما شروع می کنیم xlogo برنامه را در پس زمینه و سپس آن را ارسال کنید HUP سیگنال با کشتن. xlogo برنامه خاتمه می یابد و پوسته نشان می دهد که فرآیند پس زمینه یک سیگنال قطع دریافت کرده است. ممکن است لازم باشد قبل از ظاهر شدن پیام، کلید اینتر را چند بار فشار دهیم. توجه داشته باشید که سیگنال ها ممکن است با شماره یا نام مشخص شوند، از جمله نام پیشوند با حروف "SIG":
[me@linuxbox ~]$ xlogo &
1
[me@linuxbox ~]$ kill -INT 13601 [1]+ وقفه xlogo [me@linuxbox ~]$ xlogo &
1
[me@linuxbox ~]$ kill -SIGINT 13608
[1]+ وقفه xlogo
[me@linuxbox ~]$ xlogo &
1
[me@linuxbox ~]$ kill -INT 13601 [1]+ وقفه xlogo [me@linuxbox ~]$ xlogo &
1
[me@linuxbox ~]$ kill -SIGINT 13608
[1]+ وقفه xlogo
مثال بالا را تکرار کنید و سیگنال های دیگر را امتحان کنید. به یاد داشته باشید، ما همچنین می توانیم از مشخصات شغلی به جای PID استفاده کنیم.
فرآیندها مانند فایل ها صاحب دارند و شما باید مالک یک فرآیند (یا supe - ruser) باشید تا سیگنال های آن را با آن ارسال کنید. کشتن.
علاوه بر لیست سیگنال های بالا، که اغلب با آنها استفاده می شود کشتن، سیگنال های دیگری وجود دارد که اغلب توسط سیستم استفاده می شود. در اینجا لیستی از سیگنال های رایج دیگر آمده است:
جدول 10-5: سایر سیگنال های رایج
شماره | نام | معنی |
3 | ترک کنید | ترک کن |
11 | SEGV | نقض تقسیم بندی این سیگنال در صورتی ارسال می شود که برنامه ای از حافظه غیرقانونی استفاده کند، یعنی سعی کند در جایی بنویسد که اجازه آن را ندارد. |
20 | TSTP | توقف ترمینال. این سیگنالی است که توسط ترمینال ارسال می شود Ctrl-z کلید فشرده شده است بر خلاف STOP سیگنال، TSTP سیگنال توسط |
برنامه اما ممکن است برنامه آن را نادیده بگیرد.
28 WINCH تغییر پنجره. این سیگنالی است که توسط
سیستم زمانی که یک پنجره اندازه تغییر می کند. برخی از برنامه ها مانند بالا و کمتر به این سیگنال با ترسیم مجدد خود برای تناسب با ابعاد پنجره جدید پاسخ خواهند داد.
برای افراد کنجکاو، لیست کاملی از سیگنال ها را می توان با دستور زیر مشاهده کرد:
[me@linuxbox ~]$ kill -l
[me@linuxbox ~]$ kill -l