هر پروسسی که در سیستم شما در حال اجرا هست در حال گوش دادن برای دریافت سیگنال از طرف کاربر یا کرنل هست. این سیگنالها هر کدوم یک عدد هستن و معنیهای خاصی دارن که توسط پروسسها شناخته شده هستن.
برای مثال فرض کنید که یک برنامه رو از طریق ترمینال اجرا کردین و این برنامه هنگ کرده. معمولا در این مواقع کلید ترکیبی ctrl+c رو میزنین. در واقع این کلید ترکیبی سیگنال SIGINT (به معنی قطع کردن، استوپ کردن پروسس در حال اجرا) رو میفرسته به پروسس.
نکته: استوپ کردن در اینجا به معنی اون استوپی که میشه دوباره پروسس رو resume کرد نیست اون مال سیگنال دیگری هست.
لیست سیگنالهارو میتونین از فایل ببینین:
/usr/include/x86_64-linux-gnu/bits/signum.h
ممکنه این فایل جاش برای شما فرق بکنه که برای پیدا کردنش میتونین این دستور رو بزنین:
در صفحه man دستور kill هم لیستی از سیگنالها هست و با زدن دستور kill -l هم لیست سیگنالها رو مینویسه. جلوتر در مورد این آپشن توضیح داده شده.
aliabry@lp:~$ locate signum.h /usr/include/x86_64-linux-gnu/bits/signum.h
معنی بعضی از سیگنالها:
1
:HUB
، این سیگنال (Hang up) به صورت خودکار وقتی logout میکنین یا یک مودم رو دیسکانکت میکنین فرستاده میشود. همچنین این سیگنال برای از نو خواندن فایل کانفیگ هم استفاده میشود. فرض کنین که یک http سرور دارین و میخواین که بدون ریستارت کردن این سرویس بهش بگین که فایل کانفیگ رو بخونه خوب میتونین از این سیگنال استفاده کنین.
2
:INT
، این سیگنال به معنی قطع کردن یک پروسس در حال اجرا هست، وقتی ctrl+c رو میزنین این سیگنال فرستاده میشود.
20
:TSTP
، این سیگنال برای استوپ کردن یک پروسس در حال اجرا استفاده میشود به صورتی که اون پروسس آماده انجام ادامه کارش هست. یعنی ریستارت یا از نو شروع نمیکنه. وقتی کلید ترکیبی ctrl+z رو میزنین این سیگنال فرستاده میشود. برای اطلاعات بیشتر در مورد «Shell Job Control» یا دستور fg ،bg ،jobs جستجو کنین.
18
:CONT
، از این سیگنال وقتی استفاده میشود که یک پروسس توسط SIGTSTP یا SIGSTOP استوپ شده باشد. وقتی از دستور fg یا bg استفاده میکنین این سیگنال فرستاده میشود.
15
:TERM
، وقتی این سیگنال رو میفرستیم پروسس مربوطه اگر امکانش باشد از بین میرود. سیگنال از پروسس میخواد که هر وقت پروسسش تموم شد و با فایلهایی که کار میکرد کارش تموم شد بسته بشه. این سیگنال سیگنال پیش فرض دستور Kill هم هست.
9
:KILL
، اسم انگلیسیش گویای کاریه که انجام میده. این سیگنال بدون هیچ ملاحظهای پروسس رو از بین میبره. فکر میکنم این سیگنال پرمصرفترین سیگنال باشه.
دیدن نام سیگنال یک عدد بهوسیله l-
و برعکس
اگر این آپشن رو به تنهایی بزنین لیست تمام سیگنالهای قابل قبول رو مینویسه، مثلا برای سیستم من:
aliabry@lp:/$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
و اگر اسم یک سیگنال رو خواستیم:
در زیر اسم سیگنال ۱۵ رو میبینیم:
aliabry@lp:/$ kill -l 15 TERM
در زیر عدد سیگنال TERM رو میبینیم:
aliabry@lp:/$ kill -l TERM 15
آپشن s-
این آپشن برای تعیین سیگنال استفاده میشود. مثلا به مثالهای زیر نگاه کنین همه یک معنی رو میدن و همه سیگنال TERM یا سیگنال شماره 15 رو به پروسس 19568 میفرستن:
نام سیگنالتون رو بعد از sig-
بنویسین.
kill -sigTERM 19568 kill -sigterm 19568 kill -term 19568 kill -TERM 19568 kill -s 15 19568
استفاده از نوع عددی سیگنال
برای تعیین نوع عددی سیگنال اون عدد رو به همراه -
به کار ببرین. مثلا در زیر سیگنال شماره ۹ که قویترین سیگنال برای از بین بردن یک پروسس هست رو به دو pid میفرستیم.
aliabry@lp:/$ sudo kill -9 19636 19692