killコマンドとkillallコマンド概要

killコマンドは、指定したプロセスに対しシグナルとよばれる制御信号を送るコマンドです。シグナルを送ることにより、プロセスを強制終了させたり、中断させたりといったような、さまざまな制御を行うことがができます。

コマンドの名前から、プロセスを強制停止するコマンドだと勘違いしている人が多いですが、そういうわけではありません。あくまで制御のための信号を送るコマンドで、その制御という大きな範囲の中に、強制停止というものが入っているというイメージになります。

利用可能なシグナルの一覧を表示するには、lオプションをつけて、kill -lコマンドを実行します。

コマンド結果を見ればわかるように、シグナルには多くの種類がありますが、よく使われるものは次の通りです。

シグナル番号1 HUP

端末がハングアップしたときと同じシグナルを送ります。デーモンプロセスに対してこのシグナルを送ると再起動を開始します。その際設定ファイルを読み直すため、デーモンの設定ファイルを変更した際に、その変更を有効にするために使用することがあります。高頻度で使われるシグナルです。

シグナル番号2 INT

割り込みキー(CTRL+C)を押したときと同じシグナルを送ります。プロセスに割り込み・一時停止を入れて動作を停止させるときに使用します。

シグナル番号9 KILL

プロセスを強制終了するときに使用します。強制終了ですので、問題を引き起こす可能性もゼロではありません。

シグナル番号15 TERM

プロセスを終了するときに使用します。シグナルを指定しないでkillコマンドを実行した場合には、このシグナルを指定したものとみなされます。

コマンドの書式は

kill [オプション] [シグナル] [プロセスID]

となっていますが、表記方法にバリエーションが多いのがこのコマンドの(悪い)特徴です。プロセスIDが5400のプロセスを終了させるには、TERMのシグナルを送ることになるわけですが、次のように複数のkillコマンドの使い方があります。どのコマンドを実行しても実行結果は同じになります。

kill 5400
kill -15 5400
kill -TERM 5400

TERMシグナルを受け付けない、例えば暴走したようなプロセスに対しては、KILLシグナルを送ることによりプロセスを強制終了することができます。最終手段として覚えておきましょう。(とはいえこれも頻繁に使う事になりますが)

なお、当然のことながら、一般ユーザーは自分が実行しているプロセスにしかkillコマンドを使用できません。スーパーユーザーは他のユーザーのプロセスに対しても killコマンドを使用できます。

killallコマンド

ここまでに開設したkillコマンドではプロセスIDを指定してシグナルを送りましたが、kill allというコマンドを使うと、プロセス名を指定してシグナルを送ることができます。

procという名のプロセスをすべて強制終了する例は以下の通りです。

killall -s KILL proc