tmux unterbricht langsam den Vorgang mit Strg-C

25

Wenn ich einen Befehl mit viel Ausgabe in tmux ausführe, ihn aber mit Strg-C abbrich, gibt es eine Verzögerung von 10-15 Sekunden, bevor er stoppt. Wenn ich jedoch das Gleiche außerhalb von tmux mache, wird es sofort beendet. Warum ist das so und ist es reparabel?

In der Praxis tritt dieses Problem auf, wenn ich grep -Rin einem großen Verzeichnis arbeite und meine Suche nicht ausreichend eingeschränkt ist. Eine Problemumgehung wäre, das Ergebnis wczuerst weiterzuleiten, um sicherzustellen, dass die Ausgabe nicht zu lang ist, aber das ist nur ein weiterer Schritt, den ich vermeiden möchte.


Anmerkungen:

  • Dies hat dasselbe Verhalten in Gnome Terminal, uxterm, st und einem einfachen virtuellen Terminal (z. B. Strg-Alt-F2), jedoch ist die Verzögerung im einfachen virtuellen Terminal geringer.
  • Ich bin nicht der einzige: http://www.mail-archive.com/[email protected]/msg01569.html
  • Die Verzögerung ist länger, wenn mein Terminalfenster größer ist. Bei einem Vollbild-Terminal dauert es ungefähr 15 Sekunden, um grep -Rin einem überfüllten Ausgangsverzeichnis anzuhalten (keine anderen Argumente). Bei einem Terminal mit 80 × 25 Zeichen stoppt es fast sofort.
Schneeball
quelle
Ich bemerke keinen erkennbaren Unterschied. Ich habe versucht grep -R "a" ~/(nicht in die Datei zu schreiben) ... und yes | nl | cut -f1 | head -9999999 > ~/filedann cat ~/file.
Peter.O
@ Peter.O Einfach "yes" eingeben und Enter drücken, dein tmux ist zum Scheitern verurteilt.
Solotim

Antworten:

10

tmux hat jetzt folgende Möglichkeiten:

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

Sie können Werte für diese festlegen, wodurch die Eingabe für ^ C und Freunde einfacher wird. Siehe man tmux:

Diese beiden Optionen konfigurieren eine einfache Form der Ratenbegrenzung für einen Bereich. Wenn TMux mehr sieht als Trigger C0 - Sequenzen, die den Bildschirm modifizieren (beispielsweise Zeilenumbrüche, Zeilenvorschübe oder Rücktasten) in einer Millisekunde, wird sie stoppt die Scheibe sofort aktualisiert und neu gezeichnet statt sie vollständig all Intervall Millisekunden. Dies hilft zu verhindern, dass eine schnelle Ausgabe (z. B. yes (1)) das Terminal überfordert. Die Standardeinstellung ist ein Trigger von 250 und ein Intervall von 100. Ein Trigger von Null deaktiviert die Ratenbegrenzung.

ThomasAdam
quelle
Dies sollte die akzeptierte Lösung sein, da es funktioniert.
Polym
2
ZB setw -g c0-change-trigger 10 setw -g c0-change-interval 250>> ~ / .tmux.conf
DmitrySandalov
2
Ich habe diese auf tmux 2.3 ausprobiert und sie wurden nicht erkannt. Es wird völlig unbrauchbar, wenn Befehle viel ausgeben.
29.
1
Seit Tmux 2.1 existieren diese Optionen laut raw.githubusercontent.com/tmux/tmux/2.6/CHANGES nicht mehr. Die c0- * -Optionen zur Ratenbegrenzung wurden entfernt. Stattdessen wird ein Backoff-Ansatz verwendet.
19.
7

Sie können den kill-paneBefehl immer innerhalb der Sitzung ausgeben . Wenn der Terminal-Text wie Müll aussieht, sollte das Umbenennen des Fensters und / oder das Ausgeben resetbehoben werden.

lukaszkorecki
quelle
4

Da tmuxer sich zwischen den catProzess und Ihr Terminal einfügt , muss er die Ausgabe von lesen cat, in das Terminal schreiben und gleichzeitig Ihre Eingabe vom Terminal lesen (das ^ C) und an die Shell senden, um das zu unterbrechen Befehl. Ich bin nicht sicher, was genau die Verzögerung verursacht, aber es geht darum, wie die tmuxE / A zwischen Ihnen und der Shell, die ausgeführt wird, gepuffert werden tmux.

chepner
quelle
3

Angenommen, Sie verwenden ssh über eine Verbindung mit geringer Latenz, haben Sie versucht, mosh zu verwenden ? Neben anderen sehr nützlichen Dingen wie der Eingabevorhersage sowie dem Überleben von Verbindungsabbrüchen und sogar einer sich ändernden IP auf der Clientseite wird auch die Reaktionszeit bei Verwendung von Strg-C verbessert (indem nur der Terminalinhalt regelmäßig aktualisiert wird, anstatt den gesamten Stream zu senden). .

Sie können tmuxinnerhalb moshohne Probleme verwenden.

Julien Oster
quelle
Seltsamerweise passiert das, wenn ich vor Ort arbeite. mosh sieht aber ziemlich ordentlich aus.
Schneeball
1

Ich hatte dieses Problem mit tmux 2.3. Ich habe versucht, die Optionen c0-change-interval und c0-change-trigger wie oben beschrieben einzustellen, aber sie sind nicht mehr verfügbar. Hier ist die Git-Änderung mit der neuen versuchten Lösung: https://github.com/tmux/tmux/commit/3f4ee98162cd5bb7000f93fec0e631e123b1281d

Durch das Zurücksetzen auf tmux 1.8 konnte das Problem behoben werden, ohne dass Optionen festgelegt werden mussten.

ijt
quelle
Anscheinend wird versucht, dies zu beheben, anstatt die Problemumgehung zu verwenden. Daher sollten neuere Versionen noch bessere Ergebnisse erzielen. github.com/tmux/tmux/issues/849
dragon788