Bash Manページ:kill <pid> vs kill -9 <pid>


25

私のマニュアルページには、

kill <pid>

そして

kill -9 <pid>

これらは異なることをするので、なぜ-9はkillマンページに文書化されていませんか? 多分それはシェル特有のものだと思ったので、bashのマニュアルページも調べましたが、運はありませんでした。

ボーナス質問:-9は何をしますか?

回答:


40

kill指定されたプロセスにシグナルを送信するだけです。-9送信する信号を伝えます。

異なる番号は、異なる共通信号に対応しています。SIGINT、たとえば、2ですので、プロセスにSIGINT信号を送信するには、コマンドを発行します

$ kill -2 <pid>

ここマンページは以下を指定します:

killのデフォルトのシグナルはTERMです。

マンページには、送信できるシグナルの表もあります。この表によると、TERMです15ので、これらはすべて同等です。

kill <pid>
kill -15 <pid>
kill -TERM <pid>

通知9はKILL信号です。

   Name   Number  Action
   -----------------------
   ALRM      14   exit
   HUP        1   exit
   INT        2   exit
   KILL       9   exit  this signal may not be blocked
   PIPE      13   exit
   POLL           exit
   PROF           exit
   TERM      15   exit     [Default]
   USR1           exit
   USR2           exit
   VTALRM         exit
   STKFLT         exit  may not be implemented
   PWR            ignore    may exit on some systems
   WINCH          ignore
   CHLD           ignore
   URG            ignore
   TSTP           stop  may interact with the shell
   TTIN           stop  may interact with the shell
   TTOU           stop  may interact with the shell
   STOP           stop  this signal may not be blocked
   CONT           restart   continue if stopped, otherwise ignore
   ABRT       6   core
   FPE        8   core
   ILL        4   core
   QUIT       3   core
   SEGV      11   core
   TRAP       5   core
   SYS            core  may not be implemented
   EMT            core  may not be implemented
   BUS            core  core dump may fail

   XCPU           core  core dump may fail
   XFSZ           core  core dump may fail

8
デフォルトのsignal(kill <pid>)はTERMです。
10

9
数字は、常にではありませんが、通常、異なるUnixベースのシステムで同じです。シグナル名を使用することをお勧めします。つまり、kill -9の代わりに、kill -KILLを使用します。
mpez0

7
KILLSTOP信号はいわゆるキャッチ不能信号であると付け加えます。つまり、TERMシグナルがプロセスに送信されると、シグナルをキャッチして、必要なさまざまな「シャットダウン」操作を実行できます。KILL信号は、直ちにプロセスを停止します。
ネオ

5
最初にデフォルトのシグナルを使用し、デフォルトが機能しない場合にのみ-9を使用するのが最善です。これは、-9をキャッチできないため、プログラムがクリーンアップを行う機会がないためです。また、あなたはであなたのシステム上の信号のためのドキュメントを見つけるman 7 signal
追って通知があるまで一時停止。

7

デフォルトのシグナルはTERMで、強制終了されたプログラムがそれをキャッチし、終了する前に何らかのクリーンアップを実行できるようにします。プログラムは、そのように書かれていれば、無視することもできます。

-9またはKILLをシグナルとして指定すると、プログラムはそれをキャッチしたり、クリーンアップしたり、無視したりできません。最後の手段としてのみ使用してください。

Bashの番号と信号名のリストを表示するには、kill -l(レターエル)を使用します。


4

Ubuntu Linuxを使用しています。

Killコマンドは、基本的にプロセスにシグナルを送信して終了します。日常のコンピューティングの複雑な動作の期待を簡素化するために、killコマンドにはさまざまなオプションがあります。

上記で説明したように、その定義に対応するすべてのキル番号オプションがあります。

いくつかの行を追加したいと思います。

 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    

上記のように、これらはすべてUbuntu Linuxを実行した場合に取得できるすべての強制終了オプションです。

ただし、特定のキル信号はすべての* NIXフレーバーで共通です。

kill -9はSIGKILLオプションであり、カーネルはこのシグナルを無視できません。つまり、この-9またはSIGKILLオプションを尊重し、すぐにプロセスを終了します。このプロセスは、アプリケーションプログラムでは処理できないことに注意してください。

一方、kill -15はSIGTERMシグナルを送信します。つまり、終了する前にプロセスが完全にシャットダウンするまで待機します。これはデフォルトのシグナルです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.