なぜプロセスの強制終了オプションは-9なのか|kill -9

shellアイコンLinux

どうも、いっとくです!

Qiitaのアドベントカレンダーに触発されて今月はいっぱいアウトプットするぞーって気持ちになっています。

今更ですがLinuxの操作を極めようと思って本を読んだりいじったりしているのですが、コマンドのオプションとvimの操作が全然記憶に残らないんですけど、学習コスト高くない?

そんなわけで、今日は学んだことのアウトプットというよりは、へぇ〜って思うことがあったので書き残そうと思います!

スポンサーリンク

killコマンドのオプションってなぜ数字??

プロセスとかジョブとかを終了させたい時に使う kill コマンド。

ターミナルで操作でそれなりの頻度で使うことになるコマンドかと思います。特になんかよくわからないけど困ったぞって時に重宝しますよね。(わかってから使えって話ですが)

ところでこのkillコマンドについてずっと違和感を感じていたことがあります。

…なんでオプションが数字なの??

どうにも動かなくて強制終了する時に、kill -9 とか使うと思うのですが、よく考えたら強制するオプションなんて -f が相場でしょう!

先日そんな長年の違和感がついに解消されました!

あとkillコマンド名前怖すぎ。初めて使った時ドキドキしました。

killコマンドは終了するコマンドではなくシグナルを送るコマンド

killを使うとプロセスやジョブを終了させることが出来るので、終了用のコマンドかと思っていたのですが、厳密にはプロセスに対してシグナルを送るコマンドだったのです…!

そのシグナルを受け取ったプロセスは、受け取ったシグナルの種類に応じて停止や再起動などの処理をするんですって。

ちなみにそのシグナルの種類は kill -l で確認することが出来ます。

$ 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

めっちゃありますね…笑

まぁ使うことになるシグナルは限られていると思うので、興味あれば調べてみてください。

ちなみに、kill <プロセスid> でシグナルを指定しなかった時は、15番のSIGTERMのシグナルが送信されます。

SIGTERMは終了(termination)を意味するシグナルです。

なのでkillを使うとそのプロセスが終了するんですね〜。

実はプロセスを終了させるときや停止させる時に使う Ctrl + cCtrl + z も上記のシグナルを送信して処理しています。

そして、強制終了は9番のSIGKILLのシグナルを送信するので、 kill -9 となるわけです。

ちなみにこの9番のシグナルは少し特殊で、Linuxカーネルが直接処理をするという挙動をします。

そのため、一時ファイルを削除したりなどの終了時に必要な処理を行わずにプロセスを停止するので、シグナルを受け付けなくなったときの最終手段として使うようにしましょう!

これがkillコマンドの不自然な番号オプションの正体でした!

確かにこれだけの種類があったら、アルファベットを割り当てるよりも数字にしたれー!ってなるかも知れないですね。

それではさようなら!

コメント

タイトルとURLをコピーしました