CLAUDE LABEN
FORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられていますFORK — Claude Code 2.1.212で/forkの挙動が変わりました。会話を新しいバックグラウンドセッションへ複製し、作業を続けたまま並走できます。従来のセッション内サブエージェントは/subtaskに移りましたLIMITS — WebSearchの呼び出しがセッション単位で既定200回に制限されました。サブエージェントの起動も既定200回が上限で、暴走した検索・委譲のループを止められますMCPBG — 2分を超えるMCPツール呼び出しは自動的にバックグラウンドへ移り、セッションが固まらなくなりました。しきい値はCLAUDE_CODE_MCP_AUTO_BACKGROUND_MSで調整できますPLANFIX — プランモードがtouchやrmといったファイルを変更するBashコマンドを、許可プロンプトもcanUseToolコールバックも通さずに実行してしまう不具合が修正されましたSONNET5 — Claude Sonnet 5は導入価格として入力100万トークンあたり2ドル、出力10ドルで提供中です。8月31日を過ぎると3ドルと15ドルに戻りますIPO — Anthropicが早ければ10月の株式公開を視野に、引受銀行が投資家との面談を組み始めたと報じられています
記事一覧/Claude Code
Claude Code/2026-07-18上級

headless の Claude Code を止めたのに、ビルドだけが生き残っていた — exit 143 を前提に停止処理を設計する

headless モードの Claude Code が Bash 実行中に SIGTERM を受けると、コマンドのプロセスツリーが孤児化していました。2.1.212 の修正で挙動は exit 143 に変わります。この契約を前提に、監督スクリプトと後片づけを設計し直す手順をまとめます。

Claude Code200headless13SIGTERM自動運用17プロセス管理

プレミアム記事

夜間に回していた個人開発のメンテナンス処理を、朝になって手動で止めたときのことでした。systemctl stop を打って、プロンプトはすぐ戻ってきました。ところが数時間後、VM のディスク使用率のアラートが飛んできます。調べると、止めたはずのジョブが起動していた next build のプロセスが一つ、CPU をつかんだまま生き残っていました。親は消えているのに、子だけが動き続けている。ポートも握ったままで、次のセッションが同じポートで立ち上がらずに失敗していました。

停止コマンドは成功していました。失敗していたのは、その停止が子プロセスまで届いていなかったことです。以下では、headless(-p / SDK)モードの Claude Code が Bash 実行中に停止されたときに何が起きていたのか、Claude Code 2.1.212 の修正でそれがどう変わったのか、そして新しい exit 143 という契約を前提に監督側と後片づけをどう組み直すかを、実際に踏んだ順序で書いていきます。

停止したはずのジョブが、CPU を食い続けていた

まず、何が孤児になっていたのかを整理します。headless の Claude Code は、Bash ツールを呼ぶときに子プロセスとしてシェルを起動します。そのシェルがさらに npm run build を起動し、build が別のワーカーを起動する。ツリーは深くなります。

プロセス役割
claude(headless)ターンを回し、ツールを呼ぶ
bash -cツール実行のシェル
npm / nodeビルドやテストの本体
ひ孫worker スレッド群実際に CPU を使う

systemctl stoptimeout が送るのは、既定では親プロセスへの SIGTERM です。親の claude はシグナルを受けてターンを畳もうとします。問題は、そのとき親が子のツリーを明示的に終わらせないまま先に抜けてしまうと、孫・ひ孫が親を失った孤児(orphan)として init(PID 1)に引き取られ、そのまま走り続けることでした。ビルドは止まらず、ポートは解放されず、テンポラリの中間ファイルはディスクを埋め続けます。

私が踏んだのはまさにこれで、しかも厄介なのは「停止コマンドの終了コードは 0 だった」ことです。監督している側からは、成功したように見えていました。本番運用でこの落とし穴に一度ハマると、原因の切り分けに時間を取られます。対処の第一歩は、まず何が孤児として残るのかを正確に知ることでした。

なぜ孤児化するのか — シグナルはプロセスグループには自動で届かない

ここは Claude Code に限らない Unix の話ですが、原因の核心なので押さえておきます。kill <pid> や既定の SIGTERM は、指定した単一の PID にしか届きません。子孫プロセスへは自動的には伝播しません。

伝播させるには二つの道があります。一つはプロセスグループ全体へ送る方法で、kill -TERM -<pgid>(PID の前にマイナスを付けるとプロセスグループ ID として解釈されます)を使います。もう一つは、親プロセス自身が SIGTERM を受け取ったハンドラの中で、自分の子孫を辿って明示的に終わらせてから抜ける方法です。

修正前の headless Claude Code は、Bash 実行中に停止されたケースで、この「抜ける前に子孫を片づける」処理が抜けていました。親は行儀よく終了するのに、孫は取り残される。だからこそ、監督スクリプト側で KillMode を握っていなかった環境では、孤児が素通りしていたわけです。

送り方届く範囲孫プロセス
kill -TERM <pid>その PID のみ取り残される可能性
kill -TERM -<pgid>プロセスグループ全体まとめて届く
親がハンドラで子孫を kill親が辿った範囲親の実装しだい

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
SIGTERM がプロセスグループに届かず孤児が残る仕組みと、2.1.212 で入った中断・kill・exit 143 の契約
timeout と systemd の監督側を exit 143 前提で書き直す Before/After のコード
孤児が出ていたかを事後に確かめる検証手順と、SessionEnd フックが担う後片づけとの分担
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Claude Code2026-07-18
プランモードを「読むだけ」と信じていた — 前提を機構で確かめ直す
Claude Code 2.1.212 で、プランモードがファイルを変更する Bash を許可プロンプトも canUseTool も通さず実行していた不具合が修正されました。前提が崩れていた期間に何が起きうるのか、手元で確かめる方法と、モード名に安全性を預けない設計をまとめます。
Claude Code2026-07-17
承認したのは、私が読んだ文字列ではなかった — 確認プロンプトの中継を細工文字で検証する
チャットへ中継した確認プロンプトに、双方向上書き文字やゼロ幅文字を混ぜて通してみました。NFKC正規化の検知率が0%だった理由と、誤検知0%で細工を全件止めるための実装を記録します。
Claude Code2026-07-17
夜間に回した並列サブエージェントの記録が、追えなくなった — --forward-subagent-text で増えたログを絞り直す
サブエージェントのテキストと思考を stream-json へ流せるようになった一方で、無人実行のログ量は跳ね上がります。実測値をもとに、事後解析に効く記録だけを残す3層の保存方針と相関IDの設計をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →