いろいろ備忘録日記

主に .NET とか Go とか Python絡みのメモを公開しています。

ターミナルで突然何も入力出来なくなった場合のTips (linux, stty)

概要

4月も終わりになり、GW明けから新人さんもそろそろ実務開始されるところも多いのではないでしょうか。

ということで、自分が新人のときに何度も遭遇してパニクっていた件についてメモメモ。

今までWindowsばっかり触っていて、Linuxなんてほとんど触ったことない状態でターミナルを開いてポチポチしているといきなり「何も入力出来なくなる」ことが、自分が新人の頃に何度かありました。

当時は知識も無いので、「意味わからん。。このターミナル落としてやり直そう・・」ってやってました。

これ、大抵ターミナル上で「Ctrl+s」を押してしまっているはずです。Linuxなどのターミナルでは「Ctrl+s」を押すと、「画面への出力を止めろ」って命令を発行したことになります。なので、何も出力されない状態になります。実は、入力は受け付けられています。出力が停止状態になっているだけです。

解除するには「Ctrl+q」を押します。これは、「画面への出力を開始しろ」って命令を発行します。押した後、溜まっていた出力がドバって出力されます。

これ、自分でCtrl+sを意識して押してしまってる場合ってほとんど無いんですよねw Windowsで作業してると保存するためのショートカットキーが Ctrl+s なので、無意識に押してしまってる場合がほとんど。なので、いきなりターミナルがフリーズしたように感じる。

なので、まとめとして

いきなり画面が何も入力出来なくなったら、とりあえずCtrl+q押してみましょう

ということになります。

stty コマンドで設定を見てみる

上記のような端末に設定されている内容を見てみたい場合は以下のコマンドを打ち込むと見れます。

$ stty -a

たとえば、以下のように出力されます。

$ stty -a
speed 38400 baud; rows 33; columns 111; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>;
start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

なんかいっぱい出てますが、結果の3〜4行目に

start = ^Q; stop = ^S; 

というのが見えますね。^Ctrl を表します。なので、^QCtrl+q となります。同じように ^SCtrl+s です。

参考情報

manpages.ubuntu.com

unix.stackexchange.com

linuxfan.info

上の記事で無効化する方法が記載されていますが、業務でやってると勝手に設定変えれない場合も多いです。なので、ログインするたびに stty stop undef; stty start undef を打ち込むか、慣れてしまうというのも手です。


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com