プロセスを終了させる(kill、killall)
プロセスを終了させる手順について説明します。
プロセスを終了させるには、killコマンドや、killallコマンドを使用します。killコマンドや、killallコマンドは、プロセスにシグナルと呼ばれるメッセージを送ります。このシグナルをかいしてプロセスと通信します。
Last Update : 2014年02月14日
プロセス管理~プロセスを終了させる(kill、killall) 項目
1. kill コマンド
プロセスを終了させるにはkillコマンドを使いますが、内部的には対象のプロセスにシグナルと呼ばれるメッセージを送っているだけです。
シグナルにはいくつかの種類があり、それぞれ動作が異なります。killコマンドは任意のシグナルをプロセスに送ることができますが、 シグナルを指定しない場合は、TERMシグナルというシグナルを対象のプロセスへ送ります。
このTERMシグナルは、プロセスを正常終了させるという意味を持ちます。 受け取ったシグナルによってどういう動作をするかは、プロセス側のプログラムのドキュメント等に書かれていたりします。
kill コマンド 書式
kill [ -シグナル名/シグナルID ] pid ... kill [ -s シグナル名/シグナルID ] pid ...
※ pid(プロセスID) は、スペースで区切って複数指定できます。
代表的なシグナルの一覧
シグナルID | シグナル名 | 動作 |
1 | HUP(SIGHUP) | 本来はプロセスをハングアップさせるシグナルだが、このシグナルを受け取ったら、デーモンに設定ファイルを再読みこみさせたり、再起動させたりするように動作するよう作られているアプリケーションが多い。 |
9 | KILL(SIGKILL) | 強制終了 |
15 | TERM(SIGTERM) | 正常終了。とるべき手段をとってからプロセスが終了します。 |
例)
プロセスID(PID)が1234のプロセスを正常終了させる
# kill 1234
※ シグナルを指定しない場合は、TERMシグナルを送ります。
プロセスID(PID)が1234のプロセスを強制終了させる
# kill -9 1234 とか # kill -KILL 1234 とか # kill -s SIGKILL 1234
memo
シグナルを受っとった時の動作について
プロセスがシグナルを受っとった時の動作については、以下の様にドキュメントに記述されていたりします。
apacheのシグナルを受け取った時の動作
http://httpd.apache.org/docs/2.2/ja/stopping.html
postfixのシグナルを受け取った時の動作
http://www.postfix.org/master.8.html
どんなシグナルを送ればいいのかわかります。
2. シグナルの一覧
シグナルの一覧は以下のようにしてみることができます。
# kill -l ←「l(小文字の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
3. killall コマンド
killall コマンドもプロセスを終了させます。kill コマンドと同じように対象のプロセスに対しシグナルを送ります。
kill コマンドが対象のプロセスをPIDで指定するのに対し、killallコマンドは、停止させる対象をコマンド名で指定します。指定したコマンドを実行している全てのプロセスに対しシグナルを送ります。
killall コマンド 書式
killall [ -シグナル名/シグナルID ] command ... killall [ -s シグナル名/シグナルID ] command ...
※ command(コマンド名) は、スペースで区切って複数指定できます。
killall コマンドの使用例
vi コマンドを実行しているプロセスを停止させます。
# ps -ef|grep vi ←「vi」コマンドを実行しているプロセスを確認 root 19782 19754 0 08:20 pts/1 00:00:00 vi test1.txt ← vi コマンド実行プロセスが1つ root 19814 19791 0 08:20 pts/2 00:00:00 vi test2.txt ← vi コマンド実行プロセスがもう1つ root 19824 18437 0 08:21 pts/0 00:00:00 grep vi # killall vi ←「vi」コマンドを実行しているプロセスを停止 # ps -ef|grep vi root 19944 18437 0 08:23 pts/0 00:00:00 grep vi 「vi」コマンドを実行しているプロセスが停止しプロセスのリストにいなくなった
memo
killコマンド、killallコマンドの違いについて
例えば、複数のアカウントで同時にviコマンドでファイルを編集している場合、kill コマンドの場合は全てのプロセスを確認後、全てPIDを指定して停止させますが、killall コマンドの場合は、コマンド名を指定するだけで、そのコマンドを実行している全てのプロセスを停止させることができます。