Unterbrechen einer sehr langen Ausgabe in tmux

8

Wenn ich in einem (Gnom-) Terminal cateine Datei habe, die sich als viel zu lang herausstellt, kann ich immer Ctrl- drücken, um sie czu unterbrechen.

Doch in tmux, wenn das gleiche passiert, dauert es lange für das Signal durch das erzeugte Ctrl- ckeypress um den Server zu erreichen, und bis es soweit ist, der Server ist momentan beschäftigt mit diesem Ausgang, und ich bin nicht in der Lage , etwas zu tun , aber gerade die Flut (oder mit einem anderen Terminal).

Dies ist dem hier beschriebenen Problem etwas ähnlich .

Ich möchte das Terminal, den Server oder sogar das spezifische tmuxFenster / Fenster nicht neu starten . Verwenden lessist eine kluge Angewohnheit, aber ich frage hier, wie man bereits aufgetretene Probleme löst, nicht wie man klug ist und sie vermeidet, indem man vor dem Handeln nachdenkt ... es wird immer Überraschungen geben!

Gibt es also eine Möglichkeit, das Terminal die Überschwemmungen stoppen zu lassen, die gesendeten Daten zu verwerfen usw.? Was kann ich tun, um mich von diesen nervigen Minuten des Betrachtens von Charakteren auf meinem Bildschirm zu befreien ?

Bach
quelle
Ich habe dies mit Erfolg verwendet: github.com/sashahart/dotfiles/blob/master/.tmux.conf#L89-L93
opyate
1
Schauen Sie sich auch SuperUser an
Hastur
Keine Antwort, aber Sie können auch verwenden headoder tailgerade genug von der Ausgabe erhalten.
Matthew Rock

Antworten:

4

Zwei Vorschläge

  1. In solchen Fällen ist CTRL+ selten z effektiver als CTRL+ c: Es antwortet schneller. Danach unterbrechen Sie den Befehl, mit dem Sie ihn beenden können, kill %1oder mit welcher Jobnummer auch immer. In der Hoffnung, dass Sie immer noch etwas vom Bildschirm lesen können (ein überfluteter zufälliger Binärtext kann Ihren Zeichensatz leicht durcheinander bringen).

  2. In einem anderen Terminal können Sie fragen pgrep cat(ob catder Befehl aufgerufen wurde) und feststellen, ob der catProzess Ihre CPU verwendet, oder indem Sie pstree:

    pgrep cat | awk '{print "pstree -sp "$1}' | sh | grep tmux

    Antworte mit einer Ausgabe wie
    init (1) --- lightdm (1428) --- lightdm (2518) --- init (2534) --- tmux (22425) --- bash (22426) --- cat ( 22532) )

    In diesem Fall, nachdem Sie nur killdie cat PID:
    kill 22532

Hinweis:

  • Wenn Sie CTRL+ Coder CTRL+ drücken zund das Fenster minimieren, ist das System wahrscheinlich schneller als Sie, um die Interrupt-Anforderung zu lesen . Also aussetzen / unterbrechen, minimieren, ein wenig warten, wieder maximieren, kann auch eine Lösung sein.
  • Wie du gesagt hast lessist sicherer.
  • Mit tmux 1.8 erneut getestet und funktioniert
Hastur
quelle
Im Gegenteil @jetole: In IMHO antwortet es allgemein und gibt mindestens zwei Lösungen an, die Sie auch ohne verwenden können tmux. Natürlich kann Ihr Vorschlag auch gut oder sogar besser funktionieren, wie in einer ähnlichen Frage zu Superuser vom 22. April 13
Hastur
@jetole: Lassen Sie uns jeder vermeiden querelle : Was ich geschrieben habe ich versucht , und es funktioniert , wie Sie aus dem erraten pstreeAusgabe: es war eine echte. Ich denke, es trifft auf die Situation zu, in der op gefragt wurde: "Ich frage hier, wie man bereits aufgetretene Probleme löst , nicht wie man klug ist und sie vermeidet, indem man nachdenkt, bevor man handelt ..." . Ihre Lösung, von der ich glaube, dass sie funktioniert und das Problem löst, gehört zur Kategorie "Wie man klug ist und sie vermeidet, indem man vorher nachdenkt ..." :)
Hastur,
@jetole: Es tut mir leid zu sagen, dass Sie die Antwort und die Kommentare nicht sorgfältig gelesen haben. Ich habe diese Lösung bereitstmux mit einem Ernährungsbefehl verwendet cat text. Das tmux(22425)in Punkt 2 sollte Ihnen sagen. Übrigens habe ich tmuxauf einer neuen Maschine installiert . Es funktioniert wieder wie gesagt. Das Beispiel, das Sie bereitstellen, verwendet einen echound mehrere Zyklen: Sie sollten den forinternen Befehl abfangen , um die Überflutung mit einem kill PIDBefehl zu stoppen. Dies bedeutet, dass Sie sich tmuxselbst töten , da die Operation dies nicht möchte. Mit einer Single cat(wie für die Operation) gibt es einen Prozess, den Sie abfangen und töten können.
Hastur
Als ich sagte "Es tut mir leid zu sagen, dass Sie die Antwort und die Kommentare nicht sorgfältig gelesen haben." Ich meinte: 1) In der Antwort wird berichtet (Punkt 2), pstree -spvon welcher Ausgabe Sie die Kette von Prozessen ( -s) sehen können, die mit enden. cat (PID=22532)Dies hat für Eltern eine Bash , die für Eltern die tmux (22425) hat bedeutet, dass ich diesen Test mit tmux durchgeführt habe . Überprüfen Sie diesen Link und Sie sehen, dass er seit der 1. Version vom 19. Juni vorhanden war. 2) In dem Kommentar vom 5. September sagte ich ausdrücklich "Ich habe es versucht und arbeite" .
Hastur
Jetzt hast du oft gesagt, dass es nicht funktioniert. Bei meinen Tests funktioniert es. In welchem ​​Problem sind Sie aufgetreten, als Sie es mit einer überfluteten Katze aus einer riesigen Datei versucht haben (die op-Fallstudie)? Ich habe auf 2 verschiedenen Maschinen gemacht. Die Version von tmux wird in den Notizen angegeben (aktualisiert vor Ihrem letzten Kommentar). Die Distributionen waren ein Ubuntu 14.04 LTS und ein Debian 2.6.32-5, die Bash-Version 4.3.11 bzw. 4.1.2.
Hastur