kazmax - Linux で自宅サーバー

プロセスを終了させる(kill、killall)

プロセスを終了させる手順について説明します。

プロセスを終了させるには、killコマンドや、killallコマンドを使用します。killコマンドや、killallコマンドは、プロセスにシグナルと呼ばれるメッセージを送ります。このシグナルをかいしてプロセスと通信します。

Last Update : 2014年02月14日

プロセス管理~プロセスを終了させる(kill、killall) 項目

  1. kill コマンド
  2. シグナルの一覧
  3. killall コマンド

1. kill コマンド

プロセスを終了させるにはkillコマンドを使いますが、内部的には対象のプロセスにシグナルと呼ばれるメッセージを送っているだけです。

シグナルにはいくつかの種類があり、それぞれ動作が異なります。killコマンドは任意のシグナルをプロセスに送ることができますが、 シグナルを指定しない場合は、TERMシグナルというシグナルを対象のプロセスへ送ります。

このTERMシグナルは、プロセスを正常終了させるという意味を持ちます。 受け取ったシグナルによってどういう動作をするかは、プロセス側のプログラムのドキュメント等に書かれていたりします。

kill コマンド 書式

kill [ -シグナル名/シグナルID ] pid ...
kill [ -s シグナル名/シグナルID ] pid ...

※ pid(プロセスID) は、スペースで区切って複数指定できます。

代表的なシグナルの一覧

シグナルIDシグナル名動作
1HUP(SIGHUP)本来はプロセスをハングアップさせるシグナルだが、このシグナルを受け取ったら、デーモンに設定ファイルを再読みこみさせたり、再起動させたりするように動作するよう作られているアプリケーションが多い。
9KILL(SIGKILL)強制終了
15TERM(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 コマンドの場合は、コマンド名を指定するだけで、そのコマンドを実行している全てのプロセスを停止させることができます。

プロセス管理 関連記事
Linux 基礎知識 関連記事