exit code 143の解説: SIGTERMとgracefulなシャットダウン
exit code 143は128 + 15だ: プロセスがSIGTERM、丁寧な「今すぐ止まってください」というシグナルを受け取った。CIでは通常、jobを終わらせるよう何かが求めたことを意味し、jobが自ら失敗したわけではない。
通常の失敗とは異なり、143は外部のアクターがプロセスを終了させたことを意味する。誰がなぜSIGTERMを送るのかを理解すれば、心配すべきか肩をすくめるべきかがわかる。
エンコーディング
シグナルNでkillされたプロセスは128 + Nで終了する。SIGTERMはシグナル15なので、128 + 15 = 143。SIGTERMはgracefulに終了せよという標準的な要求だ - プロセスはSIGKILLとは異なり、終了前にクリーンアップの機会を得る。
CIで現れる理由
- jobのキャンセル - 誰かが再度pushした、または
concurrencyグループが実行をキャンセルした。 - stepまたはjobのtimeoutが発火し、まずSIGTERMを送った。
- クラウドプロバイダによるspot/preemptibleインスタンスの回収。
- 親プロセスがシャットダウンし、子にシグナルを送った。
問題かどうかの見分け方
実行がキャンセルまたは置き換えられた場合、143は想定内で無害だ - 無視する。誰もキャンセルしていない実行で現れる場合は、timeoutか、基盤インスタンスが回収されていることを疑う。コードのバグと決めつける前に、実行のキャンセル状態とtimeoutの設定を確認する。
143 vs 137
SIGTERM(143)はgracefulでcatch可能; SIGKILL(137)は即時でcatch不可、通常はOOM killerから来る。プロセスがSIGTERMを無視すると、watchdogがしばしばSIGKILLへエスカレートする - つまり137になる143は、時間内にシャットダウンしなかったプロセスだ。
重要なポイント
- exit 143 = SIGTERM(128 + 15)によるkill、gracefulな停止要求。
- CIでは通常、キャンセル、timeout、spotのpreemptionを意味する。
- 実行がキャンセルまたは置き換えられた場合は無害だ。
- SIGTERMを無視すると、SIGKILL(137)へエスカレートされうる。
関連ガイド
SIGKILL vs SIGTERM: The Two Ways a Process DiesSIGTERM politely asks a process to stop and can be handled; SIGKILL forces it to die and cannot be caught. Le…
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…
Exit Codes and Signals in CI/CD: A Practical GuideA practical guide to process exit codes and signals in CI/CD - what 1, 2, 124, 126, 127, 130, 137, and 143 me…