Skip to content

原文(日本語に翻訳)

クラッシュ後に残った古い daemon.lock のPIDをOSが別プロセスに再利用した場合、バックグラウンドエージェントが二度と起動できなくなる問題を修正しました

原文(英語)

Fixed background agents never starting again after a crash left a stale daemon.lock whose PID the OS reused

概要

Claude Codeのバックグラウンドエージェント機能は、常駐デーモンプロセスの多重起動を防ぐために daemon.lock ファイルへプロセスID(PID)を記録します。デーモンがクラッシュするとこの daemon.lock が古いPIDを記録したまま残ることがあり、その後OSが同じPID番号を全く別のプロセスに再利用してしまうと、Claude Codeは「デーモンはまだ生きている」と誤認してロックを解放できず、バックグラウンドエージェントが二度と起動しなくなっていました。この修正により、そのような偽陽性のロック検出を避けられるようになりました。

基本的な使い方

修正前(Before):

bash
claude agents
# デーモンが以前クラッシュし、daemon.lock に古いPIDが残存
# → 偶然そのPIDが別プロセス(無関係なアプリ)に再利用されている
# → Claude Codeは「デーモンは稼働中」と誤判定
# → バックグラウンドエージェントが起動できない状態が続く

修正後(After):

bash
claude agents
# 古いロックファイルのPIDが実際には別プロセスだと正しく判定
# → 陳腐化したロックとして扱われ、デーモンが正常に再起動する

実践例

マシンの異常終了やクラッシュ後にバックグラウンドエージェントを再開する場合

停電や強制終了などでデーモンプロセスが不正終了した後、次回 claude agents を実行しても起動できないという事象は、まさにこの不具合が原因になり得るケースでした。修正後は自動的に回復します。

長期間起動していないマシンで久しぶりにClaude Codeを使う場合

PIDは再起動のたびに使い回されるため、しばらく前にクラッシュしたロックファイルのPIDが、別の常駐アプリやシステムプロセスに偶然一致してしまう確率はマシンの稼働状況によって変わります。この修正はそうした環境依存の再現しづらい不具合にも対応します。

手動でのロックファイル削除が不要になる

以前はこの問題が起きた場合、ユーザーが手動で daemon.lock を探して削除するという回避策が必要になることがありました。修正後はこの手動対応が基本的に不要になります。

注意点

  • この修正はPIDの偶然の再利用という比較的まれな条件で発生する不具合を対象としています。日常的な利用で頻発する問題ではありませんでしたが、発生すると自力での回復が難しいものでした。
  • それでもバックグラウンドエージェントが起動しない場合は、claude agents のログやデーモンの状態確認コマンドで詳細を確認してください。
  • v2.1.200での修正です。以前のバージョンで起動不能に陥っている場合は、アップデート後に再度 claude agents を実行することで解消される可能性があります。

関連情報