tmuxでCtrl-Cを使用するとプロセスの中断が遅い


25

tmuxで大量の出力を使用してコマンドを実行し、Ctrl-Cでキャンセルすることにした場合、停止するまでに10〜15秒の遅延があります。ただし、tmux以外で同じことをすると、すぐに停止します。これはなぜですか、修正可能ですか?

実際には、この問題はgrep -R、大きなディレクトリで実行していて、検索が十分に制限されていないときに発生します。回避策は、結果をwc最初にパイプして出力が長すぎないことを確認することですが、それは回避したい別のステップです。


ノート:

  • これは、Gnomeターミナル、uxterm、st、およびプレーン仮想ターミナル(ctrl-alt-f2など)で同じ動作をしますが、プレーン仮想ターミナルでは遅延が少なくなります。
  • 私だけではありません:http : //www.mail-archive.com/tmux-users@lists.sourceforge.net/msg01569.html
  • ターミナルウィンドウが大きい場合、遅延は長くなります。フルスクリーン端末の場合grep -R、雑然としたホームディレクトリで停止するのに(他の引数なしで)約15秒かかります。80×25文字の端末の場合、ほとんどすぐに停止します。

識別可能な違いはありません。私が試したgrep -R "a" ~/(ファイルへの書き込みではない)...そしてyes | nl | cut -f1 | head -9999999 > ~/file、その後cat ~/file
Peter.O

@ Peter.O「yes」と入力してEnterキーを押すだけで、tmuxが終了します。
solotim

回答:


10

tmuxには次のオプションがあります。

c0-change-interval interval
c0-change-trigger trigger

これらの値を設定できます。これにより、^ Cや友人が入力しやすくなります。参照man tmux

これらの2つのオプションは、ペインのレート制限の単純な形式を構成します。tmuxは、画面を変更するトリガー C0シーケンス(キャリッジリターン、ラインフィード、バックスペースなど)を1ミリ秒以内に検出すると、ペインの更新を直ちに停止し、代わりにintervalミリ秒ごとに完全に再描画します。これは、端末を圧倒する高速出力(yes(1)など)を防ぐのに役立ちます。デフォルトは、250のトリガーと100の間隔です。トリガーをゼロにすると、レート制限が無効になります。


これが機能するため、これが受け入れられたソリューションである必要があります。
polym

2
setw -g c0-change-trigger 10 setw -g c0-change-interval 250>>〜/ .tmux.conf
DmitrySandalov

2
これらをtmux 2.3で試しましたが、認識されませんでした。コマンドが大量の出力を出力すると、まったく使用できなくなります。
ijt

1
Tmux 2.1以降、これらのオプションはraw.githubusercontent.com/tmux/tmux/2.6/CHANGESに従って存在しなくなり ました。レート制限のc0- *オプションは削除されました。代わりに、バックオフアプローチが使用されます。
megar

7

kill-paneセッション内からいつでもコマンドを発行できます。端末のテキストがゴミのように見える場合は、ウィンドウの名前を変更するか、発行resetすることで修正する必要があります。


4

プロセスと端末のtmux間に自分自身を挿入するためcat、端末から出力を読み取り、cat端末に書き込むと同時に端末から入力を読み取り(^ C)、シェルに送信して、コマンド。遅延の原因は正確にはわかりtmuxませんが、それは、あなたとで実行されるシェルとの間のI / Oをバッファリングする方法に関するものtmuxです。


3

低遅延接続でsshを使用していると仮定して、moshを使用してみましたか?入力予測のほか、切断の存続やクライアント側のIPの変更など、非常に優れた機能の中でも、Ctrl-Cを使用した場合の反応時間も明確に改善されます(ストリーム全体を送信するのではなく、定期的に端末コンテンツを更新するだけです) 。

あなたは使用することができtmux以内にmosh何の問題もなく。


奇妙なことに、これはローカルで作業しているときに起こります。しかし、moshはかなりきれいに見えます。
スノーボール

1

tmux 2.3でこの問題が発生していました。上記のようにc0-change-intervalおよびc0-change-triggerオプションを設定しようとしましたが、それらは使用できなくなりました。新しい試みのソリューションによるgitの変更は次のとおりです。https : //github.com/tmux/tmux/commit/3f4ee98162cd5bb7000f93fec0e631e123b1281d

tmux 1.8に戻すと、オプションを設定せずに問題が修正されました。


回避策を使用するのではなく、これを修正しようとしているように見えるため、新しいバージョンでは出力がさらに改善されるはずです。github.com/tmux/tmux/issues/849
dragon788
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.