【要約】無人で回していたClaude Codeが8時間45分ハングした日、犯人はsubprocessだった [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
Windows上でClaude Codeを自動実行する開発者が、ジョブが8時間以上停止する問題に直面した。原因はAIの判断ミスではなく、Pythonのプロセス管理とデータの型変換という古典的な問題であった。
- ・
subprocess.runのタイムアウトが機能しなかった。 - ・
.cmd経由の起動により、孫プロセスが生き残った。 - ・孫プロセスが標準出力パイプを保持し、EOF待ちで凍結した。
- ・JSON化により、辞書の整数キーが文字列へ静かに変換された。
- ・型不一致により、特定の条件下でロジックが機能しなくなった。
// Approach
開発者はプロセス管理を
Popenへ変更し、OSコマンドによる強制終了を導入した。また、データの整合性を保つための検証手法を検討した。- ・
subprocess.Popenを用いてプロセスを明示的に制御した。 - ・
taskkill /PID <pid> /T /Fでプロセスツリー全体を殺した。 - ・タイムアウト後に再度
communicateを呼び、後始末を行った。 - ・JSONの往復(round-trip)テストを導入し、型変換を検証した。
// Result
修正後のコードは、タイムアウト時もプロセスを残さずクリーンに終了した。これにより、無人実行の信頼性が向上した。
- ・タイムアウト発火時、3.2秒で例外が発生しプロセスも消滅した。
- ・実稼働のCLI呼び出しも、25.2秒で正常に完了した。
- ・「AIを動かす土台」における、プロセス管理とデータの堅牢性が確保された。
Senior Engineer Insight
> 自動化基盤において、AIの出力以上に「呼び出し側の実装」が致命的なリスクとなる。特にWindowsのプロセス管理や、シリアライズによる型の変化は、エラーを出さずにシステムを壊す。プラットフォーム固有の挙動を理解し、境界条件でのテストを徹底すべきだ。地味な実装箇所にこそ、高密度の罠が潜んでいる。