Ctrl-sターミナルエミュレーターをハングしますか?


311

私はvimdocの文に出会いました:

Note: CTRL-S does not work on all terminals and might block
                further input, use CTRL-Q to get going again.

そして、このキーは本当に私のvimをハングさせます。emacs noxでC-s/ を使用しても問題はなかったので、vimのせいだと思っていましたC-x C-s。しかし、ちょうど今、マンページを読んでを押すとCtrl-s、それもハングman します(lessPAGERとして設定しています)。

だから誰かが私に何が起こっているのか教えてもらえますか?

端末エミュレーターはとでxtermありlxterminalttyこの問題もあります。そして、Ctrl+ qはすべての場合にプロセスを再び正しくします。


6
これはばかげた質問かもしれませんが、質問で試したことを述べていませんでした。C-qスクロールを再度有効にしようとしましたか?
h3rrmiller

3
@ h3rrmillerええ、そうです。しかしctrl-s、プロセスがハングする原因を知りたいだけです。
Hongxu陳

以前は、スクロールロックキーC-sを備えたキーボードC-qがあり、昔は「スクロールロックトグル」でした。を追加stty ixanystty ixoff -ixonてこの機能を無効にすることができます.bashrc
-h3rrmiller

2
これは、ターミナルエミュレータの最近の愚かな歴史的な設定です。端末の修正方法については、この関連質問を参照してください。
インゴカルカット

1
@IngoKarkatそれは愚かだとは言いません...私はまだ時々それを使う
-h3rrmiller

回答:


361

この機能は、ソフトウェアフロー制御(XON / XOFFフロー制御)と呼ばれます

データリンクの一方の端(この場合、ターミナルエミュレーター)がこれ以上データを受信できない場合(バッファーがいっぱいか、いっぱいに近いか、ユーザーが送信C-sするため)、「XOFF」を送信して、 「XON」信号を受信するまで一時停止するデータリンク。

内部で行われているのは、「XOFF」がカーネル内のTTYドライバーに、TTYドライバーが「XON」を送信するまでデータを送信しているプロセスをスリープ状態にするように指示することです。カーネルは、プロセスが最初から停止されなかったかのようにプロセスを再開します。

C-s端末のスクロールロックを有効にします。端末がスクロールしないようにします(「XOFF」信号を送信してソフトウェアの出力を一時停止します)。

C-qスクロールロックを無効にします。端末のスクロールを再開する(「XON」信号を送信してソフトウェアの出力を再開する)。

この機能はレガシー(端末が非常に遅く、スクロールを許可しなかった時代に遡る)であり、デフォルトで有効になっています。

この機能を無効にするには、~/.bash_profileまたはのいずれかで次のものが必要です~/.bashrc

stty -ixon

10
実際には、60年代ではないとしても、70年代にまで遡ると思います。
キース

ただし、Ubuntu 16.04では機能していないようです。
ロバート

3
「stty -ixon」<-----これは、先週インターネットで読んだ最も重要なものの1つです。ありがとうございました。
ブラッドP.

実際、この歴史は80年代より数十年早く始まります。The TTY demystifiedを参照してください。
ロボアレックス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.