Skip to content
Latchkey

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)へエスカレートされうる。

関連ガイド