tail -f filename
Wie kann ich den Modus beenden, ohne Ctrl+c
den Vorgang abzubrechen?
Was ich möchte, ist ein normaler Weg zu beenden, wie q
in top
.
Ich bin nur neugierig auf die Frage, weil ich der Meinung bin, dass das Beenden des Prozesses keine gute Möglichkeit ist, etwas zu beenden.
tail
ist nicht interaktiv; Befehle werden nicht angenommen.man signal
mehrtail
, es ohne Sorge zu unterbrechen oder sogar zu töten. Wenn Sie jedoch eine Alternative suchen, sollten Sie in Betracht ziehenmost
, die über einen zugegebenermaßen unterdokumentierten "Follow" -Modus verfügt, der mit Umschalt + F eingeleitet wurde und mit Q.tail -f
ist es nicht :)Antworten:
Wie bereits in den Kommentaren erwähnt, Ctrl-Cwird der
tail
Vorgang nicht abgebrochen , indem entweder ein SIGTERM- oder ein SIGKILL-Signal (das berüchtigte-9
...) gesendet wird . Es wird lediglich ein SIGINT gesendet, der anweisttail
, den Weiterleitungsmodus zu beenden und zu beenden.Zu Ihrer Information, dies ist ein besseres Werkzeug:
In
less
können Sie drücken Ctrl-C, um den Vorwärtsmodus zu beenden und durch die Datei zu blättern. Drücken FSie dann, um erneut in den Vorwärtsmodus zu wechseln.Beachten Sie, dass dies
less +F
von vielen als bessere Alternative zu empfohlen wirdtail -f
. Lesen Sie die folgende Antwort, um Unterschiede und Einschränkungen zwischen den beiden Tools zu erfahren : Ist "tail -f" effizienter als "less + F"?quelle
tail
wird nicht durch STRG-C beendet und ist nicht interaktiv), halte ich meine Antwort für mehr als angemessen.kill <pid>
. Bei den meisten Programmen gibt es keinen wirklichen Unterschied zwischenCtrl-C
(=SIGINT
)SIGTERM
und bis zu einem gewissen GradSIGKILL
. Die Standardaktion für alle drei ist, den Prozess einfach zu beenden, als obexit()
er aufgerufen worden wäre, mit der Ausnahme, dass fürSIGKILL
keiner der Benutzermodus-Codesexit()
aufgerufen wird (also keineatexit()
Aufräumarbeiten usw.).Ctrl-C
undSIGTERM
sind insbesondere völlig identisch, es sei denn, das Programm greift explizit auf eines von beiden zu und handelt danach. GNU-Tail nicht.exit()
das Aufrufen .exit()
wird dieatexit()
Handler ausführen und offene stdio-Dateien bereinigen (am wichtigsten Ausgabepuffer leeren). EinSIGINT
Handler könnte dies tun, aber die meisten Programme kümmern sich nicht darum. Ich weiß nicht obtail
.Das ist ControlC:)
^C
( ControlC) sendet ein SIGINT an den Prozess, der wie folgt definiert ist:Genau das wollen Sie hier tun, ist zu unterbrechen
tail
. Es gibt keine andere Möglichkeit, das zu erreichen, was Sie versuchen ("schön" Schluss zu machen), und während andere Antworten die Möglichkeit bieten, auftail
andere Weise aufzuhören , sind sie nicht besser.Durch Drücken von
^C
wird versucht, eine Aufgabe unter Linux zu unterbrechen. Dies ist völlig normal und nur dann "nicht gut", wenn sich dieser Prozess in der Mitte von etwas befindet und Sie nicht zulassen, dass es beendet wird, und dann die einzige "nicht gute" Seite Effekt ist übrig gebliebene Dinge aus diesem Prozess. Beispiel: Während^C
einesmake
Befehls wird teilweise kompilierte Software verlassen, aber das ist in Ordnung: Ein weiterer Durchlauf vonmake
wird diese bereinigen / fortsetzen, wo sie aufgehört hat.quelle
make
Beispiel eine Erinnerung, warum wir immer.DELETE_ON_ERROR:
in unsere Makefiles schreiben - wir möchten, dass Make teilweise geschriebene Zwischendateien entfernt, wenn es erfährt, dass einer seiner Befehle ein Signal empfangen hat.SIGINT
vor dem Beenden abgefangen und bereinigt werden, wie in Tobys.DELETE_ON_ERROR:
Beispiel angegeben.^C
:)Das kannst du nicht machen. Vielleicht wolltest du rennen
tail -f somefile | less
Das Ctrl cwird vom tty-Subsystem (und von Ihrer Shell) interpretiert und sendet ein
SIGINT
Signal (siehe signal (7) und pty (7) ...). Siehe tty entmystifiziert .quelle
Dies würde funktionieren und Ihre Frage beantworten, ist jedoch keine besonders zufriedenstellende Lösung.
Dadurch wird der Befehl 15 Sekunden lang ausgeführt und dann für Sie beendet, ohne dass Sie drücken müssen
^C
quelle
tail
. Trotzdem irren Sie sich nicht, denke ich.tail
besser , mit SIGTERM zu kündigen als mit SIGINT?Die Antworten unterscheiden sich je nach Kontext. Um tail -f elegant zu beenden , benötigen Sie einen Auslöser. Angenommen, Sie versuchen, die Ausgabe einer Aufgabe zu überwachen, die zu einem bestimmten Zeitpunkt abgeschlossen sein wird - dies kann Ihr Auslöser werden.
Ich habe in der Vergangenheit ähnliche Ideen verwendet.
Genießen.
quelle