kill はその名の通りプロセスを強制終了するためのコマンドですが、 その他にも便利な使い方があります。
kill は引数としてプロセス ID (PID, ps で確認できる)を取り、 killall は引数としてコマンドやデーモンの名前を取ります。 1つの PID は1つのプロセスに対応するため、 kill は1つのプロセスしか強制終了しませんが、 killall は同じ名前のプロセスが走っていればそれらを すべて強制終了させます。だから、kill"all" です。たとえば、次のような状況を考えます。
PID COMMAND 1001 kterm 1002 kterm 1003 ktermPID=1002,1003 の kterm は残ります。
% kill 1001
kterm は3つとも終了します。
% killall kterm
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 があるプロセスはダメってことでしょうか。 代表的なのは次のようなものです。
- cron
- inted
- syslog