web-dev-qa-db-ja.com

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

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/C-x C-sを使用しても問題ないので、vimのせいだと思っていました。しかし、マンページを読んでいてCtrl-sを押すと、manもハングします(lessをページャーとして設定しています)。

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

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

333
Hongxu Chen

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

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

内部で起こっていることは、「XOFF」がカーネルのTTYドライバーにデータを送信しているプロセスをスリープ状態にする(映画の一時停止のような)ように伝え、TTYドライバーが「XON」を送信するまでそもそもプロセスが停止されなかったかのようにカーネルがプロセスを再開します。

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

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

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

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

stty -ixon
379
h3rrmiller

私の終わりに.bashrc追加したスクリプト:

#so as not to be disturbed by Ctrl-S ctrl-Q in terminals:
stty -ixon
28