MENU

ターミナルが急に入力を受け付けなくなったときの戻し方|誤操作で止まった画面の復帰

ターミナルを操作しているとき、突然キーを押しても何も反応しなくなることがあります。ほとんどのケースは誤ったキー操作や実行中のプログラムへの干渉が原因で、端末を閉じなくても元の状態に戻せます。この記事では、状況別に入力を取り戻すための手順を整理します。文字コードやロケール由来の表示の乱れは扱いません。あくまで「キー入力が受け付けられなくなった」場面に絞っています。

目次

状況別・すぐ試せるキー操作の早見表

止まった原因によって対処キーが異なります。まず下の一覧で心当たりのある状況を探してみてください。

  • Ctrl+S を押してしまった → Ctrl+Q で再開(フロー制御)
  • プログラムが前景で動いている → Ctrl+C で中断
  • Ctrl+Z でサスペンドしてしまった → fg で復帰
  • ページャーや対話ツールの中にいる → q または Ctrl+C
  • 端末モードが壊れた(文字が出ない・Enter が効かない) → stty sane または reset
  • SSH セッションが完全に固まった → Enter → ~.(チルダ+ドット)

Ctrl+S が原因の場合(フロー制御の停止)

もっとも多い誤操作の一つが Ctrl+S です。これはターミナルのフロー制御(XON/XOFF)を使って画面への出力を一時停止する機能で、もともとはプリンターや低速端末の時代に用いられていた仕組みです。現在のターミナルエミュレータでも多くのディストリビューションでデフォルト有効になっています。

Ctrl+S を押した後にコマンドを入力しても、画面には一切表示されません。入力した文字はバッファに蓄積されているため、実際にはキー入力を受け付けています。ただし画面反映が止まっているので、一見「フリーズした」ように見えます。

対処は Ctrl+Q を押すだけです。出力が再開され、それまでに入力した文字がまとめて表示されます。

Ctrl+Q

この挙動を恒久的に無効にしたい場合は、stty -ixon を ~/.bashrc に追加しておくと、以降のシェルセッションで Ctrl+S によるフロー制御が発動しなくなります。

stty -ixon

プロセスが前景で動いていて入力を受け付けない場合

シェルはコマンドを前景(フォアグラウンド)で実行しているあいだ、そのプロセスが終了するまで待機します。この間はシェルのプロンプトには戻れません。

Ctrl+C は実行中のプロセスに SIGINT を送ります。多くのコマンドはこれで即座に終了し、シェルプロンプトに戻ります。長時間かかる処理を止めたいときにも使えます。

Ctrl+Z は実行中のプロセスを「一時停止(サスペンド)」してシェルに戻ります。プロセスはバックグラウンドで停止したままの状態になります。意図せず Ctrl+Z を押してしまった場合、次のコマンドで前景に戻せます。

fg

複数のジョブがある場合は jobs コマンドで一覧を確認できます。

jobs

サスペンドしたプロセスをそのまま終了したいときは kill でジョブ番号を指定します。%1 は jobs の出力で確認できるジョブ番号に対応します。

kill %1

端末モードが壊れた場合(stty sane / reset)

ターミナルはシェルとプログラムのあいだに「端末モード」と呼ばれる設定を持っています。プログラムの異常終了などでこの設定が崩れると、入力した文字が画面に表示されなくなったり、Enter キーを押しても改行されなかったりする状態になります。

まず stty sane を試します。端末モードを一般的なデフォルト値に戻すコマンドです。

stty sane

画面に文字が出ない状態でこのコマンドを入力するときは、キーを打っても入力されているかどうか分かりにくいことがあります。一度 Enter を押してから stty sane と入力し、再度 Enter を押してみてください。

stty sane で改善しない場合は reset コマンドを使います。端末にエスケープシーケンスを送信して初期化します。実行後いったん画面が暗くなることがありますが、しばらく待つとプロンプトが戻ります。

reset

現在の端末設定の詳細は次のコマンドで確認できます。エコーオフ(-echo)やフロー制御の状態(ixon/ixoff)なども出力されます。

stty -a

SSH セッションが固まった場合

SSH で接続中にネットワーク切断やサーバー側の応答停止が起きると、ターミナル上のキー入力が一切返ってこなくなります。この状態では通常の Ctrl+C や Ctrl+Z は接続先サーバーに送られるため、ローカルの SSH クライアントには効きません。

SSH クライアントが持つエスケープシーケンス ~.(チルダ+ドット)を使うと、セッションを強制切断できます。次の順番でキーを押します。

  1. Enter を押す
  2. ~(チルダ)を押す
  3. .(ピリオド)を押す

最初に Enter を挟む理由は、SSH がこのシーケンスを「行頭から始まるコマンド」として認識するためです。行の途中では誤検知を防ぐため無視されます。正常に動作すると「Connection closed.」などのメッセージが表示され、ローカルのプロンプトに戻ります。

~. でも切断できない場合は、別の端末ウィンドウを開いて SSH プロセスを確認し、強制終了する方法があります。

# SSH プロセスのPIDを確認
ps aux | grep ssh

# PIDを指定して強制終了(PIDは上のコマンドで確認する)
kill -9 

よくあるつまずきとチェックポイント

以下は一般的につまずきやすいポイントです。

  • 「何を押しても無反応」のときの優先順位:まず Ctrl+Q → 次に Ctrl+C → それでも戻らなければ stty sane の順で試すと、多くのケースは解決します。
  • Ctrl+Z 後にプロセスが残り続ける:Ctrl+Z を押した後にプロンプトが返ってきてもプロセスは終了していません。意図せず Ctrl+Z を繰り返すとジョブが蓄積し、後で混乱しやすくなります。jobs で定期的に確認するとよいでしょう。
  • パスワード入力中に何も表示されない:sudo や ssh のパスワードプロンプトでは、セキュリティのためにエコー(入力した文字の表示)が意図的にオフになっています。入力はされているため、正しいパスワードを打ち終えたら Enter を押せば処理が進みます。
  • ターミナルエミュレータ自体がフリーズした場合:Gnome Terminal や iTerm2 などターミナルエミュレータ側のプロセスが応答しなくなった場合は、上記の手順は効きません。エミュレータのタブやウィンドウを閉じる操作が必要で、その際に内部で動いているセッション(シェルや SSH)は別途切断・終了が必要になることがあります。
  • stty sane 後に日本語入力の挙動が変わる:stty sane はエコーやキー入力に関する幅広い設定をリセットします。IME や日本語入力に影響が出る場合は、ターミナルを一度閉じて開き直すのが手早い対処になります。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次