UNIXでkill -9コマンドの9番を使う理由 [閉まっている]


101

私はそれがトピックから外れていることを理解しています、私はオンラインでどこにも見つけることができませんでした、そしておそらくコミュニティのプログラミングの達人がこれを知っているかもしれないと思っていました。
私は通常使用します

kill -9 pid

仕事を殺すために。私はいつも9の起源を知りました。オンラインで調べたところ、

「9は、キャッチまたは無視できないKILLシグナルを意味します。つまり、プロセス(一部の実行中のアプリケーション)がすぐに終了することをシグナルします」(ソース:http : //wiki.answers.com/Q/What_does_kill_-9_do_in_unix_in_its_entirety

しかし、なぜ9なのか?そして、他の数字はどうですか?歴史的な意味はありますか、それともUnixのアーキテクチャのためですか?


6
私はこの質問は、より良いsuperuser.comに属していることを、考える
ラファウRawicki

回答:


89

他のシグナルのリストについては、Unixシグナルに関するウィキペディアの記事を参照してください。SIGKILLはたまたま9を取得しました。

数字としてニーモニックを使用することもできます。

kill -SIGKILL pid

6
昔(つまり、4.xBSD程度)は、シェルコマンドでニーモニックを使用できなかったため、9という数字が非常に多くの古いダストデッキシェルスクリプトに書き込まれています。
zwol 2012年


50

ここでのより良い答えは単にこれだと思います:

mike@sleepycat:~☺  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    

9の「重要性」については、おそらく何もないでしょう。Linuxプログラミングインターフェイス(p 388)によると:

各信号は、1から順番に始まる一意の(小さい)整数として定義されます。これらの整数は、SIGxxxxという形式の記号名で定義されます。以来、各信号のために使用される実際の数値は、実装ごとに異なる、それは常にプログラムで使用されるこれらの記号名です。


32

最初に、Unixライクなシステムのシグナルとは何かを知る必要があります(数分で完了します)。

シグナルは、重要なイベントが発生したことを示すために(実行中の)プログラムに送信されるソフトウェア割り込みです。

イベントは、ユーザー要求から不正なメモリアクセスエラーまでさまざまです。割り込み信号などの一部の信号は、ユーザーがプログラムに通常の制御の流れにない何かをするように要求したことを示しています。

使用できるシグナルにはいくつかのタイプがあります。すべての使用可能な/可能なシグナルの完全なリストを取得するには、「$ kill -l」コマンドを使用します。 ここに画像の説明を入力してください

上記の出力では、各シグナルに「シグナル番号」(例:1、2、3)と「シグナル名」(例:SIGUP、SIGINT、SIGQUIT)が関連付けられていることがはっきりとわかります。各信号の機能の詳細については、こちらのリンクをご覧ください

最後に、「kill -9コマンドでなぜ9番なのか」という質問に行きます。

プログラムまたはスクリプトに信号を配信する方法はいくつかあります。シグナルを送信するために一般的に使用される方法の1つは、killコマンドを使用することです。基本的な構文は次のとおりです。

$ kill -signal pid

ここで、signalはシグナルの番号または名前のいずれかであり、その後にシグナルの送信先のプロセスID(pid)が続きます。

たとえば--SIGKILL(または-9)の場合、signalはプロセスをすぐに強制終了します。

$ kill -SIGKILL 1001

そして

$ kill -9 1001

どちらのコマンドも同じものです。つまり、上記では「シグナル名」を使用し、後で「シグナル番号」を使用しています。

判定killコマンドで「シグナル名」と「シグナル番号」のどちらを使用するかを選択する自由があります。


19

ビートルズの「Revoulution 9」への言及です。サウンドクリップを集めてノイズを見つけたコレクションで、ジョンレノンが「ナンバー9、ナンバー9 ...」を何度も繰り返しているのが特徴です。さらに、この曲は1969年に逆に再生されたときにジョンが「私をつけて、死んだ男...」と言うこと

したがって、9番目のシグナルは、killシグナルの最も致命的なものになる運命にありました。


17
これをあなたのお尻から引っ張っているのか、それとも本当である可能性があるのか​​は本当にわかりません。
Jonathon Reinhart

そのトピックの終わりは本当に壮大です、特に私の前の2つのコメント。私はまた、killとどのシーケンスを使用するかについてのその記事を偶然見つけました:pthree.org/2012/08/14/appropriate-use-of-kill-9-pid
Gull_Code

私はこれが真実であることをとても望んでいます... :)
nafas

「ナンバー9」と言っている人はレノンではありません。ストーリーの残りの部分にも同じくらい真実があると思いますが(つまりなし)、誰が知っているのでしょう:)
スティーブンケネディ

8

Unixシグナルの非常に長いリストがあり、ウィキペディアで確認できます。やや混乱しますが、実際に使用killしてプロセスにシグナルを送信できます。たとえば、kill -SIGSTOP 12345プロセス12345に実行の一時停止を強制する一方kill -SIGCONT 12345で、再開を指示します。の少し不可解なバージョンはkill -9ですkill -SIGKILL


2
シグナルを送信する基本的なシステムコールはとも呼ばれkillます。おそらく、元の信号セットのほとんど(1から15まで)のデフォルトの動作がプロセスを終了するためでした。
zwol 2012年

4

9番に意味はないと思います。さらに、一般的な考えにもかかわらず、killプロセスを強制終了するだけでなく、プロセスにシグナルを送信するためにも使用されます。あなたが本当に興味があるなら、あなたはここここを読むことができます


3

なぜkill -9:「猫の9人の命を殺す」に関して、シグナルのリストの9番がSIGKILLとして選択されました。


3

SIGKILLプロセスを強制終了するために使用します。SIGKILL無視したり処理したりすることはできません。Linuxでは、与える方法SIGKILL

kill -9 <process_pid> 
kill -SIGKILL <process_pid> 
killall -SIGKILL <process_name>
killall -9 <process_name>

1

シェルでkill -lコマンドを入力します

9番目の数字[ 9)SIGKILL ]がわかるので、kill -9またはkill -SIGKILLを使用できます。

SIGKILLは確実にkillシグナルであり、後処理、無視、または処理することはできません。プロセスを強制終了するというデフォルトの動作で常に動作します。


1

これ-9はsignal_numberであり、送信されるkillメッセージはKILL(キャッチ不可、無視不可)タイプでなければならないことを指定します。

kill -9 pid

以下と同じです。

kill -SIGKILL pid

signal_numberを指定しない場合、デフォルトは-15、つまりTERM(ソフトウェア終了信号)です。入力kill <pid>はと同じkill -15 <pid>です。


0

どちらもkill -sigkill processID、kill -9 processIDと同じです。基本的にはプロセスの強制終了です。


0

この "kill%1"のように強制終了できないプロセスがあります。そのプロセスを終了する必要がある場合は、特別なコマンドを使用して、そのプロセスをkill -9で強制終了します。たとえば、vimを開いて停止し、ctrl + zを使用してジョブを確認し、killプロセスを適用した後、このプロセスが終了しないため、ここではkill -9コマンドを使用して終了します。

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