原文(日本語に翻訳)
外部SIGINTシグナル(IDEの停止ボタンや kill -INT など)がグレースフルシャットダウンを実行しなかった問題を修正しました。ターミナルモードが正しく復元され、突然の終了の代わりに --resume ヒントが表示されるようになりました。
原文(英語)
Fixed external SIGINT (e.g. IDE stop button, kill -INT) not running graceful shutdown — terminal modes are now restored and the --resume hint is printed instead of an abrupt exit
概要
Claude Codeの実行中にIDE(VSCodeなど)の停止ボタンや kill -INT コマンドなどの外部SIGINTシグナルを受け取った場合、以前はターミナルが不正な状態のまま突然終了していました。この修正により、外部SIGINTでもグレースフルシャットダウンが実行され、ターミナルモードが適切に復元され、セッション再開のための --resume ヒントが表示されるようになりました。
基本的な使い方
この修正は自動的に適用されます。特別な設定は不要です。
bash
# 以前の動作(修正前):
# IDEの停止ボタンやkill -INTでClaude Codeを終了すると:
# - ターミナルが壊れた状態(エコーなし、カーソルが消えるなど)になることがあった
# - --resumeヒントが表示されなかった
# 修正後の動作:
# - ターミナルモードが適切に復元される
# - --resumeヒントが表示される
# - セッションを再開できるセッションを再開するには、表示される --resume ヒントに従います。
bash
# --resumeで最後のセッションを再開
claude --resume
# または特定のセッションIDを指定して再開
claude --resume <session-id>実践例
VSCodeの統合ターミナルでの使用
VSCodeの停止ボタン(ターミナルの「×」ボタン)を押した場合でも、グレースフルシャットダウンが実行されます。
修正前の問題:
1. VSCodeでClaude Codeを実行中
2. ターミナルパネルの「×」ボタンをクリック
3. → ターミナルが壊れた状態になり、--resumeヒントも表示されない
修正後の動作:
1. VSCodeでClaude Codeを実行中
2. ターミナルパネルの「×」ボタンをクリック
3. → グレースフルシャットダウンが実行される
4. → "セッションを再開するには: claude --resume <id>" のようなヒントが表示される
5. → ターミナルが正常な状態で終了するスクリプトからのプロセス制御
シェルスクリプトやプロセスマネージャーからClaude Codeを制御する場合。
bash
#!/bin/bash
# Claude Codeをバックグラウンドで起動
claude &
CLAUDE_PID=$!
# 何らかの条件でClaude Codeを停止する
# 修正前: kill -INT $CLAUDE_PID で突然終了していた
# 修正後: グレースフルシャットダウンが実行される
sleep 60
kill -INT $CLAUDE_PID
# プロセスの終了を待つ
wait $CLAUDE_PID
echo "Claude Codeが正常に終了しました"ターミナルマルチプレクサでのセッション管理
tmuxやscreenでClaude Codeを実行している場合のセッション管理。
bash
# tmuxペインでClaude Codeを実行中に
# tmuxのpane-killedやsession終了でSIGINTが送られても
# グレースフルシャットダウンが実行される
# 後でセッションを再開する
claude --resume注意点
- この修正はCtrl+Cによる通常の中断とは別に、外部プロセスからのSIGINTシグナルに対応したものです。Ctrl+Cの動作は変更されていません。
- ターミナルモードの復元により、Claude Code終了後のターミナルが正常に使用できる状態になります。以前は
resetコマンドやstty saneを実行する必要があった場合があります。 --resumeヒントが表示されるため、長時間の作業セッションが外部要因で中断された場合でも継続できます。- SIGKILLシグナル(
kill -9)はグレースフルシャットダウンをバイパスするため、ターミナルモードが復元されない場合があります。可能な限りSIGINT(kill -INTまたはkill -2)を使用してください。