序文
一部の再起動スクリプトでは、プロセスを強制終了した後、一定期間スリープすることがよくあります。なぜですか。次に、勉強しましょう
理由
killコマンドは、指定されたシグナルを対応するプロセスに送信することがわかっています。killコマンドの動作原理は、システム操作シグナルとプログラムのプロセス識別番号をLinuxシステムのカーネルに送信し、次にシステムカーネルに送信することです。動作するプロセス識別番号プロセスを指定できます。通常、15(SIGTERM)と9(SIGKILL)を使用します。情報番号はなく、デフォルトは15です。
9と15の意味:
9 (KILL):杀死一个进程,强行终止一个进程,这可能会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。
15 (TERM):正常停止一个进程,这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源,相当于让进程正常终止。
このことから、キルプロセスはすぐには有効になりませんが、ある程度の遅延があると推測できます。
プロセスを無条件に終了する9を除いて、すべてのkillシグナルの中で、他のシグナルはブロックまたは無視される可能性があり、シグナル9の場合でも、最初に保留キューに入れられ、次のCPUスケジューリングまで有効になりません。通常、プロセスを強制終了した後、プロセスが強制終了されるようにしばらくスリープします。そうしないと、プロセスが強制終了されず、再起動が失敗します。
追加:kill -lを使用して、すべてのkillシグナル値を表示できます
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