どうも、いっとくです!
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 + c
や Ctrl + z
も上記のシグナルを送信して処理しています。
そして、強制終了は9番のSIGKILLのシグナルを送信するので、 kill -9
となるわけです。
ちなみにこの9番のシグナルは少し特殊で、Linuxカーネルが直接処理をするという挙動をします。
そのため、一時ファイルを削除したりなどの終了時に必要な処理を行わずにプロセスを停止するので、シグナルを受け付けなくなったときの最終手段として使うようにしましょう!
これがkillコマンドの不自然な番号オプションの正体でした!
確かにこれだけの種類があったら、アルファベットを割り当てるよりも数字にしたれー!ってなるかも知れないですね。
それではさようなら!
コメント
[…] 参考 […]