Claude CodeでCtrl+Zを押してもシェルに戻れないときの切り分け
Ctrl+Zでシェルに戻らず「Your conversation moved to the background」の画面が出る報告と、プロセスグループが孤児でTUIが固まる報告を、ドキュメントの記述と並べて切り分けます。
Claude CodeでCtrl+Zを押したのにシェルのプロンプトが出ない症状は、2種類あります。1つは「Your conversation moved to the background」と書かれたagent view(Claude Code内のセッション一覧)が開く症状。もう1つは、画面は描画されているのにキー入力を受け付けなくなる症状です。前者はGitHubのissue #97583、後者は#101603で報告されています。
どちらも、押したキーが同じでも原因が違います。まず自分の症状がどちらかを見分け、次に取れる手を選びます。
Ctrl+Zで出る画面が「シェル」か「agent view」かを見分ける
ドキュメントのキー一覧には、Ctrl+Zは「Suspend Claude Code」で、Unix限定でプロセスをシェルへ中断し、fgで再開すると書かれています。キーバインド設定のページでも、Ctrl+Zは端末側のUnixプロセス中断(SIGTSTP)として扱われています。
ところが#97583の報告者(macOS、iTerm2、v2.1.283)は、同じキーで次の画面に入ると書いています。
Claude Code v2.1.278
Sonnet 5 · [project directory]
1 awaiting input · 0 working · 0 completed
Your conversation moved to the background — enter opens it · esc returns to it · ctrl+c twice quits画面の最上段と案内文は、agent viewの説明にある「←で前面のセッションをバックグラウンドへ送ったときの表示」と同じ文言です。つまりシェルではなく、Claude Code自身の画面です。見分けはプロンプトで足ります。
- シェルのプロンプトが出て
fgで戻れる:従来どおりのSIGTSTPによる中断 Needs input・Working・Completedの3区画が出る:agent view。シェルではない- 何も反応せず、描画だけ続く:プロセスグループの問題(後半の節)
Ctrl+Zの2通りの結果
シェルに戻る
プロセスが停止し、fgで再開する。ドキュメントのキー一覧にある説明はこちらです。
agent viewが開く
会話はバックグラウンドのセッションとして動き続け、シェルに出るには追加の操作が要る。
v2.1.278からv2.1.283の間で何が変わったと報告されているか
#97583は2026年9月27日に起票され、openのままです。ラベルにはregressionとarea:agent-viewが付き、コメントはありません。報告者は、最後に動作したv2.1.278と症状が出たv2.1.283を挙げています。
報告者は、v2.1.279からv2.1.283までのchangelogにCtrl+Z・SIGTSTP・suspendへの言及がないとも書いています。実際にv2.1.279〜v2.1.283のchangelogには、これらに触れた項目がありません。挙動が仕様変更なのか不具合なのかは、issueのコメントにもドキュメントにも書かれていません。
一方で、agent viewのドキュメントにはCtrl+Zの記述が複数あります。
| 状況 | Ctrl+Zの動き(ドキュメントの記述) |
|---|---|
| agent viewからアタッチしたセッション | Ctrl+Zの動き(ドキュメントの記述)元いたagent viewに戻る |
claude attachで開いたセッション | Ctrl+Zの動き(ドキュメントの記述)シェルに戻る |
| 通常の前面セッション | Ctrl+Zの動き(ドキュメントの記述)シェルへ中断しfgで再開(キー一覧) |
キー一覧のCtrl+Zの説明には、agent viewへ移るという記述がありません。報告された挙動は、ドキュメントの3行目と食い違っています。
シェルへ出るための現実的な手
修正が入るまでの間、ドキュメントに書かれた操作だけで会話を失わずにシェルへ出られます。
Escを押すと、バックグラウンドに送られた会話へ戻れますEnterで選択中の行を開き直せますCtrl+Cを2回押すとシェルに抜けます
Ctrl+Cの2連打で抜けても、バックグラウンドに送られたセッションは止まりません。detachはセッションを止めません。終わらせるときは、セッション内で/stopを実行します。
後でその会話に戻る手順は次のとおりです。
claude agentsagent viewを開くと、直前まで使っていた会話が行として残っています。Enterか→で再び前面に出せます。agent viewそのものの使い方はagent viewの解説に、過去の会話を呼び戻す手段は/resumeコマンドの記事にまとめています。
agent viewを無効にすれば従来のCtrl+Zに戻るのか
disableAgentView設定をtrueにするか、環境変数CLAUDE_CODE_DISABLE_AGENT_VIEWを設定すると、バックグラウンドエージェントとagent viewを丸ごと無効化できます。
export CLAUDE_CODE_DISABLE_AGENT_VIEW=1
claudeただしこれでCtrl+Zが通常のSIGTSTPに戻るかは、ドキュメントにもissueにも記載がありません。試すなら、新しいセッションでCtrl+Zを押し、fgで戻れるかを自分の環境で確かめます。副作用として、claude agentsによるセッション管理も使えなくなります。起動時の既定値をまとめて切り替える方法は起動時の既定を切り替える記事が扱っています。
Vimとの行き来で困るなら、中断以外の経路を用意する
#97583の報告者が特に困っているのは、tmuxの分割ペインでVimとClaude Codeを並べ、Ctrl+Zで抜けてfgで戻る流れです。agent viewを挟むと、1回で済んでいた切り替えが2段階になります。
中断に頼らない選択肢もあります。
- tmuxのペイン移動(
prefix+矢印)でシェルのペインへ移る - 別のウィンドウやタブでシェルを開いておく
Ctrl+Bで動作中のBashコマンドをバックグラウンドへ回す(Ctrl+Zとは別機能。tmux内ではprefixと重なるため2回押す)
どれもissue側で挙動が決まるまでの回避であり、Ctrl+Zを元に戻すものではありません。
画面は動いているのにキーが効かない — プロセスグループが孤児のとき
もう1つの症状は、#101603に詳しく書かれています。報告環境はWSL2のUbuntu 24.04、Windows Terminal、Claude Codeはv2.1.241です。Windows Terminalのプロファイルからwsl.exe -d <distro> -- bash -lc "claude"のように起動していて、Claudeの親にジョブ制御を持つシェルがいません。
報告者の説明を要約すると、次の流れです。
- Claude CodeのTUIは
-isigで動くため、Ctrl+Zの0x1Aはカーネルを通らず、TUIが自分で読み取る - 中断のために端末を元の(cooked)モードへ戻す
- 自分に停止シグナルを送る
- プロセスグループが孤児のため、カーネルが停止シグナルを破棄する
- 端末はcookedのまま、プロセスは生きて描画だけ続く。入力は読まれない
報告者が外部から取ったプロセス状態では、状態がSのままでT(停止)になりません。-isig -icanon -iexten -echoだった端末が、Ctrl+Zの後にisig icanon iexten echoへ変わっていた、とも書かれています。
報告者が示した復旧コマンド
別の端末から、固まったプロセスのPIDを指定して再開と再描画を促します。
kill -CONT <pid> && kill -WINCH <pid>端末モードが戻らないときは、sttyで生モードに設定してからもう一度促す手順も併記されています。
stty -F /dev/pts/<N> raw -echo && kill -CONT <pid> && kill -WINCH <pid>これは報告者がWSL上で試した手順で、他のOSや端末で同じ効果があるかはissueに書かれていません。stty -FはLinuxの書式で、macOSでは-fになります。
自分の起動が孤児になっているかを調べる
issueの報告者は、固まったプロセスのPID・親PID・プロセスグループID・セッションIDを並べて見ています。Claudeが自分のグループとセッションの先頭で、親が別のセッションにいれば、停止シグナルは破棄される条件に当たります。
ps -o pid,ppid,pgid,sid,stat,tt,cmd -p <pid>報告された例では、Claudeのpgidとsidが同じ349、親(/init)は別のセッション347でした。状態はSのままで、Tにはなっていません。
予防として効く起動の仕方
同じissueには、bash -lc "claude; :"のように末尾に; :を付けると、シェルが自分をexecで置き換えず、ジョブ制御可能な親が残ってプロセスグループが孤児でなくなる、とあります。ただしこの場合も、Ctrl+ZでTUIから抜けてfgを打つ必要は残ります。固まる状態が、通常の中断に変わるだけです。
stty susp undefは効かないと報告されています。TUIが-isigで動いていて、中断文字がもともと働いていないためです。
関連する過去のissue
#97583の本文は、#16727と#16520を関連として挙げています。どちらもクローズ済みで、#16727は2.1.1でCtrl+ZがClaude Codeをバックグラウンドへ送らなくなった不具合、#16520はCtrl+Zが余計に捕捉されるという報告です。changelogには、Ctrl+Zまわりの修正として、ラッパー経由(npxやbun run)での起動時にターミナルが固まる問題の修正や、Kittyキーボードプロトコルの端末で中断が効かない問題の修正が過去の版に記録されています。同じキーでも、原因が版ごとに違うことがわかります。
症状別の早見表
| 症状 | 見たもの | まず試すこと |
|---|---|---|
Ctrl+Zでagent viewが開く | 見たものYour conversation moved to the background | まず試すことEscで戻る、Ctrl+C2回でシェルへ |
| 描画は続くがキーが効かない | 見たもの親がシェルでない起動(WSLのプロファイル等) | まず試すこと別端末からkill -CONTとkill -WINCH |
中断はできるがfgが要る | 見たものシェルのプロンプトが出る | まず試すこと通常のジョブ制御としてfg |
| どれにも当たらない | 見たもの他の端末・版固有の問題 | まず試すことclaude --versionを控えてissueを検索 |
どの症状でも、報告するときは版・OS・端末・起動方法の4点が揃っていると原因を絞りやすくなります。
まとめ
WSLのプロファイルからwsl.exeでclaudeを直接呼んでいる構成は、Ctrl+Zが効かなくなる条件を満たしやすい起動方法です。agent viewの件より先に、; :を付けるなど起動側の見直しを検討する価値があります。
#97583は仕様か不具合かが決まっていません。v2.1.283より新しいバージョンのchangelogにCtrl+Zの項目が載った時点で、同じ手順で挙動を取り直すと判断できます。