kill と killall

kill はその名の通りプロセスを強制終了するためのコマンドですが、 その他にも便利な使い方があります。


kill と killall の違い

kill は引数としてプロセス ID (PID, ps で確認できる)を取り、 killall は引数としてコマンドやデーモンの名前を取ります。 1つの PID は1つのプロセスに対応するため、 kill は1つのプロセスしか強制終了しませんが、 killall は同じ名前のプロセスが走っていればそれらを すべて強制終了させます。だから、kill"all" です。

たとえば、次のような状況を考えます。

  PID   COMMAND
  1001  kterm
  1002  kterm
  1003  kterm  
% kill 1001
PID=1002,1003 の kterm は残ります。

% killall kterm
kterm は3つとも終了します。

kill と killall のオプション

kill や killall はさまざまなオプションを持ち、 さまざまなシグナルをコマンドに送ることができます。 よく使うのは、-KILL (= -9) と -HUP (-1) でしょうか。

  -KILL : どんなコマンドもこれにかかれば必ず終る、必殺のオプション
  -HUP  : hang up の略で、終了のあと再起動します
  
-HUP はデーモンが読み込んでいる設定ファイルを変更して、 立ち上げ直さなければならないときに便利です。 例えば inetd などはブート時に読み込まれるものなので、 kill -HUP を知らないと /etc/inetd.conf を変更するたび いちいちリブートしないといけません。 しかし実は、次のコマンド一発ですみます。

# kill -HUP `cat /var/run/inetd.pid`

/var/run/inetd.pid は inetd の PID を格納しているファイルで、 バックシングルクォート ` で囲むことにより、cat の実行結果を kill の引数としています。

なお、今実験して見たらば、inetd は killall してはイケナイようです。 /var/run に *.pid があるプロセスはダメってことでしょうか。 代表的なのは次のようなものです。


FreeBSD の部屋


Apr. 1, 2000