SIGKILL vs SIGTERM: プロセスが死ぬ2つの方法
SIGTERMは「シャットダウンしてください、クリーンアップの猶予があります」。SIGKILLは「あなたはもう死んだ」。一方はcatch可能; もう一方は不可。
どちらのシグナルもプロセスを終了させるが、礼儀と決定性が異なる。この区別は、多くのCIの挙動 - gracefulなキャンセル、OOM kill、シャットダウンでハングするプロセス - を説明する。
SIGTERM(シグナル15)
SIGTERMはデフォルトの、丁寧な終了要求だ。プロセスはハンドラをインストールしてそれをcatchし、バッファをflushし、接続を閉じ、クリーンに終了できる。行儀の良いシャットダウンはこう動く。SIGTERMを無視するプロセスは、単に動き続ける。
SIGKILL(シグナル9)
SIGKILLはcatch、ブロック、無視のいずれもできない。カーネルはクリーンアップの機会なくプロセスを即座に取り除く。これは最後の手段のツールだ - out-of-memory killerによるものを含め、プロセスが今すぐ死ぬべきときに使われる。
エスカレーションのパターン
オーケストレータやtimeoutは通常、まずSIGTERMを送り、猶予期間を待ち、プロセスが終了しなければSIGKILLへエスカレートする。つまりgracefulなシャットダウン中にハングするプロセスは強制的にkillされる - だから遅いシャットダウンは、想定内の停止をハードなkillに変えうる。
TERM then KILL after grace
timeout --signal=TERM --kill-after=10s 60s ./long-taskCIでどう現れるか
- SIGTERM → exit 143、通常はキャンセル、timeout、preemption。
- SIGKILL → exit 137、通常はOOM killer。
- 143に続く137は、猶予期間が切れたことを意味する。
重要なポイント
- SIGTERM(15)はcatch可能で、gracefulなクリーンアップを許す。
- SIGKILL(9)は即時で、catch不可、そして最終的だ。
- ツールはまずTERMを送り、猶予期間後にKILLへエスカレートする。
- CIでは: TERM → exit 143、KILL → exit 137。
関連ガイド
Exit Code 143 Explained: SIGTERM and Graceful ShutdownExit code 143 means a process was terminated by SIGTERM (128 + 15). In CI it usually means cancellation, a ti…
Exit Code 137 Explained: SIGKILL and the OOM Killer in CIWhat exit code 137 means in CI: the process received SIGKILL, almost always from the out-of-memory killer. Ho…
What Does "OOM Killer" Mean? The Linux Out-of-Memory KillerThe OOM killer is the Linux mechanism that kills a process when the system runs out of memory. Learn how it p…