SIGKILLシグナル
SIGKILLシグナルとは?

UNIX系OSでは、プロセス間の通知や制御に「シグナル」(signal)という仕組みが使われる。多くのシグナルはプロセス側で捕捉して独自の処理を実装できるが、SIGKILLシグナルは例外である。プロセスはこのシグナルを無視することも、受信をブロックすることも、動作を変更することもできない。カーネルが対象プロセスを直接消去するため、応答不能に陥ったプロセスも確実に終了させられる。
通常、プロセスの終了にはSIGTERMシグナル(15番)が使われる。SIGTERMを受け取ったプロセスは、一時ファイルの削除やネットワーク接続の切断といった後処理を自ら行ってから終了できる。SIGTERMを無視したり、後処理が長引いて終了しないプロセスに対し、最終手段としてSIGKILLシグナルが用いられることが多い。
SIGKILLシグナルではプロセスが後処理を行う機会がまったく与えられないため、ファイルへの書き込みが途中で中断されてデータが破損したり、ロックが解放されないまま残ったりする副作用が生じることがある。また、保存前だったデータは消失する。応答不能なプロセスへの対処では、まずSIGTERMシグナルでの自主的な終了を促し、それでも終了しない場合にSIGKILLシグナルを使うことが多い。
オペレーティングシステム(OS)の内部でもSIGKILLシグナルに近い仕組みが使われる場面がある。Linuxではメモリ不足時に「OOM Killer」と呼ばれる機構が働き、選択されたプロセスを強制終了する。この場合も対象プロセスは終了処理を実行できない。なお、すでに終了済みだが親プロセスに回収されていない「ゾンビプロセス」にはSIGKILLシグナルを送っても効果がなく、カーネルスレッドや割り込み不可能な待機状態にあるプロセスも終了できない場合がある。