Gibt es eine Möglichkeit, das Einfrieren von tmux zu verhindern, wenn viel Text an das Terminal ausgegeben wird?

Gibt es eine Möglichkeit, das Einfrieren von tmux zu verhindern, wenn viel Text an das Terminal ausgegeben wird?

Wenn in einer tmux-Sitzung innerhalb von xterm ein Programm große Mengen an Ausgabe erzeugt (z. B. ist cat very_long_filedie gesamte Sitzung für eine Weile eingefroren. Selbst wenn ich Strg-C drücke, wird nichts unterbrochen. Vermutlich, weil tmux eingefroren ist und Strg-C nicht an das Programm weiterleitet, das die Ausgabe erzeugt. Gibt es eine Möglichkeit, dies zu verhindern?

Antwort1

Die richtige Lösung besteht darin, sich die c0-*-Optionen von tmux anzusehen und zu versuchen, die Ausgaberate zu begrenzen. Der Grund für dieses Problem liegt darin, dass Daten schneller an das Terminal gesendet werden, als es sie anzeigen kann. Daher ist eine Ratenbegrenzung die einzige Möglichkeit.

Antwort2

Ich habe dieses Problem immer noch in tmux 1.6-2 auf Ubuntu 12.10. Eine Problemumgehung, die ich gefunden habe, besteht darin, die Sitzung zu trennen (Präfix+d) und dann erneut anzufügen ( tmux attach, guter Kandidat für einen schnellen Shell-Alias). Es sieht so aus, als würde tmux im Hintergrund tatsächlich reagieren – Sie können mit Strg+C bestätigen, dass Ihr Prozess tatsächlich sofort beendet wird – es ist nur die Zeichnung, die blockiert. Das Trennen funktioniert sofort, und wenn Sie erneut anfügen, wird die Zeichnung zum Ende gesprungen sein.

Antwort3

Soweit ich weiß, gibt es in den aktuellen Versionen keine Möglichkeit, dies zu verhindern, aber es wird daran gearbeitet. Einige Patches finden Sie auf der Mailingliste von tmux.http://thread.gmane.org/gmane.comp.terminal-emulators.tmux.user/2689.

Ein gutes Schlüsselwort für die Suche im Internet ist „Flusskontrolle“.

Antwort4

Leider wurden die c0-*-Optionen zur Ratenbegrenzung ab tmux Version 2.1 entfernt (Änderungsprotokoll). Soweit ich weiß, besteht die einzige Möglichkeit, die Ratenbegrenzung anzupassen, darin, die Variablen, die sie beeinflussen, im Quellcode (tmux.h) zu aktualisieren:

"READ_SIZE ist die maximale Datengröße, die von einem PTY gespeichert werden kann (die Höchstmarke des Ereignisses). READ_BACKOFF ist die Datenmenge, die auf die Ausgabe an ein TTY wartet, bevor PTY-Lesevorgänge zurückgesetzt werden. READ_TIME ist die Zeitspanne (in Mikrosekunden), die vor dem nächsten Lesen zurückgesetzt werden soll, wenn ein TTY über READ_BACKOFF liegt."

Wo Sie die Voreinstellungen finden: (ab tmux v2.2):

#define READ_SIZE 1024
#define READ_BACKOFF 512
#define READ_TIME 100

verwandte Informationen