Claude Media
Claude CodeでCtrl+Zを押してもシェルに戻れないときの切り分け

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で再開する。ドキュメントのキー一覧にある説明はこちらです。

#97583の報告

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 agents

agent 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の親にジョブ制御を持つシェルがいません。

報告者の説明を要約すると、次の流れです。

  1. Claude CodeのTUIは-isigで動くため、Ctrl+Zの0x1Aはカーネルを通らず、TUIが自分で読み取る
  2. 中断のために端末を元の(cooked)モードへ戻す
  3. 自分に停止シグナルを送る
  4. プロセスグループが孤児のため、カーネルが停止シグナルを破棄する
  5. 端末は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の項目が載った時点で、同じ手順で挙動を取り直すと判断できます。

この記事を共有:XはてブLinkedIn