killコマンドとkillallコマンドは、プロセスに“シグナル”を送るコマンドです。
例えば、実行中のコマンドがなかなか終了しない場合には、[Ctrl]+[C]キーを押して強制終了させることがあります。実は、[Ctrl]+[C]キーを押すと、「INT」というシグナルがプロセスに送られています。
killコマンドやkillallコマンドが送っているのは「TERM」というシグナルで、「Terminate」つまり「終了しなさいという信号を送っている」という意味になります。
他のシグナルを送りたいときは「kill -HUP プロセスID」のように、オプションでシグナルの略称を指定します。ちなみに「HUP」はもともとハングアップ(回線切断)の信号で、端末を使用するプロセスはこのシグナルを受け取ると終了します。メモリに常駐するタイプのプロセスはHUPシグナルを受け取ると再起動するので、サーバプロセスに対して設定を再読込させたい場合や、再起動させたい場合に使われることがあります(※)。
【※】シグナルに対してどのような動作をするかについては、おおむねの方針が存在しますが、実際にどうなっているかはコマンドによって(開発者によって)異なります。
また、シグナルは数値で指定することもできます。先ほどのHUPであれば「kill -1 プロセスID」のように指定することも可能です。
表記 | 数値 | 意味 |
---|---|---|
HUP | 1 | 制御している端末/プロセスがハングアップした |
INT | 2 | キーボードからの割り込み命令([Ctrl]+[C]キー) |
QUIT | 3 | キーボードからの中止命令([Ctrl]+[\]キー) |
TERM | 15 | プロセスの終了命令(デフォルト) |
KILL | 9 | プロセスの強制終了命令 |
STOP | 19 | プロセスの停止命令([Ctrl]+[Z]キー) |
CONT | 18 | プロセスの再開命令 |
※「SIGHUP」「SIGINT」のように“SIG”を付ける場合もあります。killコマンド、killallコマンドはどちらも使用可能です |
killコマンドとkillallコマンドで使用可能なシグナル名は、「-l」オプションで確認できます(画面3)。
kill -l
killall -l
「kill プロセスID」「killall 名前」で終了できなかったプロセス、つまり、終了命令(TERMシグナル)では終了できなかったようなプロセスでも、他のシグナルでは終わらせることができるかもしれません。
例えば、「HUPシグナル」は、プロセスを実行したユーザーがログアウトしたのと同じような意味合いなので、うまくプロセスを終了できることがあります。
それでも終了しない場合は、問答無用でプロセス終了させる「KILLシグナル」を送ります(画面4)。
kill -KILL プロセスID
killall -KILL 名前
“起動して1時間以上経過している××というプロセスを終了させたい”、という場合は、「-o」オプション(--older-thanオプション)を使用します(画面5)。逆に、新しいプロセスの場合は「-y」オプション(--younger-thanオプション)を使います。時間の指定方法は「-o」オプションと同じです。
killall -o 10m 名前
killall --older-than=10m 名前
時間は数字と記号を使って示します。例えば、10分であれば「10m」のようにします。
記号 | 時間単位 |
---|---|
s | 秒 |
m | 分 |
h | 時 |
d | 日 |
w | 週 |
M | 月 |
y | 年 |
PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.