HN 日本語サマリー

← 一覧へ戻る
プログラミング

Show HN: Corral – エージェントが起動したすべてのコマンドを終了させる

Show HN: Corral – Kill every command your agent starts (github.com)

19 pointsby CG1446 コメント

要約

Corralは、AIエージェントがバックグラウンドで起動し、終了時にクリーンアップされないコマンドの問題を解決するために開発されたツールです。このツールは、エージェントが開始したプロセスツリー全体を確実に終了させることを目指しています。

全文翻訳

この夏、AIエージェントのバックエンドでインターンをしていた際に、tail -fのようなコマンドやランダムなバックグラウンドジョブが実行された後、それらを終了せずにエージェントが終了してしまうことに気づきました。興味を持ってClaude Codeがどのようにこれを処理しているか調べたところ、同様の問題があることがわかりました。 Bashツールからのバックグラウンドプロセスがセッション終了時にクリーンアップされない問題や、タイムアウトがプロセスグループ全体にSIGTERMを送信してClaude Code自体を終了させてしまう問題があります。ほとんどのランナーは、開始したプロセスのみを終了するため、二重フォークしたり、バックグラウンドで実行したり、stdoutを開いたままにしたりするものは、生き残るか、ランナーをハングさせてしまいます。 Corralは、Linuxのプロセスとシグナルについて学習しながら、この問題に対する修正を試みたものです。corral --wall 30s -- yourcommand のように実行すると、終了時には、それが開始したものは何も実行されていないはずです。 コマンドは独自のセッションで実行されるため、それを終了してもあなた自身を終了させることはできません。また、独自のcgroupで実行されるモードもあり、プロセスツリー全体が一度に終了します。これには、セッションやプロセスグループを変更したプロセスも含まれます。 cgroupが利用できない場合は、/procを介してツリーを追跡します(これは少し弱く、親が死んだ後にセッションを変更したプロセスは捕捉できますが、異なるユーザーとして実行されているものや、systemdのような別のサービスに引き渡されたものは終了できません)。すべてが終了したことを確認できない場合は、120で終了します。 フィードバックや、さらに学習するためにできることについて、ぜひご意見をお聞かせください。