Linux端末上における罠。フリーズというより出力停止。テレプリンタ時代のコマンド。
問題
Vimを使っているとしばしばフリーズすることがあった。原因不明。メモリ不足でもないはず。今までは端末のタブを閉じて強制終了していた。
原因
なんとLinuxの端末でCtrl
+S
キーは出力を停止するコマンドだった。じつはディスプレイに出力されないだけで入力は受け付けているらしい。だが出力されないため、フリーズしたように見える。
罠
Ctrl
+S
はWindowsでいう「保存(save)」のショートカットキーとしてよく使われている。まちがって押してしまうことがあるかもしれない。
起源
そもそも、出力停止コマンドとは何か? 出力停止したい時などあるのか?
どうやらこのコマンドの起源はテレプリンタらしい。かつてはディスプレイでなくプリンタで出力していた。いちいち出力を一時停止して確認していたようだ。
現代ではディスプレイなので、まったく使う機会がないはず。それほど前時代的なコマンドらしい。もう歴史の勉強をしているような気分。
解決
Ctrl
+Q
で出力再開できる。
永久解決
そもそも出力停止コマンドを無効化したいなら以下。
~/.bashrc
[[ -t 0 ]] && { stty stop undef; stty start undef; }
.bashrc
ファイルに上記を追記する。コードの意味は以下。
code | 意味 |
---|---|
[[ -t 0 ]] |
標準入力がオープンしているとき |
stty stop undef |
Ctrl +S による出力停止が無効化 |
stty start undef |
Ctrl +Q による出力再開が無効化 |
試しにvimでCtrl
+S
を入力するとフリーズしなくなった。文字入力モードだと^S
と入力されたが。
所感
こんな罠があるとは知らなかった。ASCII文字コードの制御コードといい、コンピュータの基礎技術にはすでに使われなくなった前時代的なコマンドが多数ある。
対象環境
- Raspbierry pi 4 Model B
- Raspbian buster 10.0 2019-09-26 ※
- bash 5.0.3(1)-release
$ uname -a Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux