Oft führe ich den cat
Befehl versehentlich für Dateien mit einem Inhalt von bis zu einigen tausend Zeilen aus.
Ich versuche, den cat
Befehl mit Ctrl+ Coder Ctrl+ abzubrechen Z, aber beide werden erst wirksam, nachdem die Gesamtausgabe von cat
im Terminal angezeigt wird. Ich muss also warten, bis sie cat
vollständig ausgeführt wird.
Gibt es eine bessere Lösung, die das Warten vermeidet? Denn manchmal sind die Dateien bis zu einer Größe von 100 MB groß, und es wird ärgerlich, darauf zu warten.
Ich benutze tcsh
.
curiosity
Befehl versuchen ...alias curiosity='sudo killall cat'
Antworten:
Wenn die fraglichen Dateien wirklich viele Daten enthalten, kann das Signal tatsächlich ankommen,
cat
bevor es beendet ist. Was Sie wirklich beobachten, ist die endliche Geschwindigkeit Ihres Terminals -cat
sendet die Daten an das Terminal und es dauert einige Zeit, bis das Terminal alle Daten anzeigt.Denken Sie daran, dass normalerweise das gesamte Ausgabefenster für jede Ausgabezeile neu gezeichnet werden muss (dh verschieben Sie den Inhalt des Fensters eine Zeile nach oben und drucken Sie die nächste Zeile unten). Es gibt zwar Techniken und Algorithmen, die dies beschleunigen, als wenn es auf einfache Weise geschehen wäre, aber es dauert noch einige Zeit.
Wenn Sie also die Ausgabe so schnell wie möglich entfernen möchten, blenden Sie das Terminalfenster aus , da in der Regel kein tatsächliches Neuzeichnen stattfindet. In einer grafischen Umgebung kann dies bedeuten, entweder das Fenster zu minimieren oder auf einen anderen virtuellen Desktop zu wechseln. In der virtuellen Linux-Konsole müssen Sie nur auf einen anderen ( Ctrl+) Alt+ wechseln .Fx
Beachten Sie auch, dass Sie, wenn Sie dies über eine langsame Netzwerkverbindung (z. B. SSH über eine GSM-Verbindung) ausführen, definitiv viel weniger Ausgabe sehen würden, bevor Sie
cat
vom Signal getötet werden, da die Geschwindigkeit des Terminals nicht mehr der Engpass wäre .quelle
~?
, um die verfügbaren Optionen anzuzeigen (wird~.
geschlossen).tty-stop-output
. Sie können dann Strg + C senden. Um die AusgabeTerminal Setup
Ich gehe davon aus, dass dies mehr mit der Art und Weise zu tun hat, wie das Terminal eingerichtet ist, als mit irgendwelchen Pufferungsproblemen. Überprüfen Sie die Ausgabe von
stty -a | grep intr
, die Sieintr = ^C;
in der Ausgabezeile haben sollten, wenn Ctrl- Camtty
/ aktiviert istpty
. Wenn nicht, können Siestty intr ^C
es aktivieren. Fügen Sie die Zeile zu Ihrem.tcshrc
oder hinzu.login
, um sie dauerhaft zu machen (oder löschen Sie die Zeile, die sie zuerst ändert!).Wenn Ctrl- fehlschlägt C, können Sie auch versuchen,
SIGQUIT
mit Ctrl- zu senden \. Wenn dies nicht funktioniert, überprüfen Sie erneutstty -a | grep quit
, ob es richtig eingerichtet ist.Terminal Emulator Setup
Überprüfen Sie auch die Einstellungen für Ihren Terminal-Emulator (falls Sie einen verwenden). Möglicherweise ist auf dieser Ebene eine Verknüpfung eingerichtet (möglicherweise für eine Kopie oder ähnliches) und das Ctrl- Cerreicht die
pty
Ebene nicht. Eine Verknüpfung kann auch an einer anderen Stelle in Ihrer Desktop-Umgebung oder Ihrem Windows-System eingerichtet werden.Ein guter Test unter Linux, wenn Sie einen Terminal-Emulator verwenden, besteht darin, zu einer Linux-Konsole zu wechseln ( Ctrl- Alt- F1), sich dort anzumelden und zu prüfen , ob dasselbe Verhalten auftritt. Wenn dies nicht der Fall ist, liegt das Problem möglicherweise bei Ihrem Windows-System oder Terminal-Emulator.
Es könnte ein Problem mit der Verzögerung zwischen dem Lesen von Daten vom
pty
Gerät sein, wie von peterph vorgeschlagen . Aber wenn dies der Fall ist und Sie müssen tatsächlich Minuten warten , bis die Daten angezeigt werden, dann sicher das Terminal - Emulator ist Pufferung Art und Weise zu viele Daten (oder Ihr PC ist sehr langsam). Die Antwort wäre, einen Weg zu finden, um diese Puffergröße in Ihren Terminal-Emulator-Einstellungen zu reduzieren oder einen anderen zu verwenden.Extra Tipp
Etwas anderes, das es wert ist, hinzugefügt zu werden. Normalerweise lande
cat
ich incat
einer außer Kontrolle geratenen Situation, wenn ich versehentlich eine Binärdatei habe. Der andere Effekt kann darin bestehen, die Terminaleinstellungen zu verfälschen (wenn die Binärdaten mit verschiedenen Terminal-Escape-Codes übereinstimmen, was häufig der Fall ist). Wenntput
installiert ist (normalerweise standardmäßig), können Sie einen Neustart mit dem folgenden Befehl vermeiden:quelle
Dies ist , was
tmux
Optionc0-change-interval
undc0-change-trigger
konzipiert. Sie sollten ohnehin einen Bildschirmmanager für die fortsetzbare Sitzung verwenden.quelle
Die Option Ctrl- Oist seit 110 Baud-Tagen unter Unix verfügbar. Runaway Cat-Befehle waren immer dann ein Problem, wenn eine lange ASCII-Datei auf dem langsamen Ausgabegerät abgelegt und die gesamte Datei im Ausgabepuffer des Gerätetreibers abgelegt wurde. Ctrl- Owürde die Spülung des Puffers starten und ein Follow-up durchführen Ctrl- Owürde die Spülung ausschalten, damit die Katze mit normaler Geschwindigkeit gelesen werden kann. Ctrl- Owurde eingegeben und die gesamte Datei wurde geleert und gab schnell eine Eingabeaufforderung zurück.
Es ist nicht bekannt, ob Linux-Gerätetreibercodierer der Ansicht sind, dass diese Funktion weiterhin hinzugefügt werden muss. Diese Funktion wurde auf Gerätetreiberebene hinzugefügt, wo Ctrl- Sund Ctrl- Qnur implementiert werden konnte. Ich habe dies verwendet, um große Debugging-Läufe mit vielen Scheckdrucken zu sichern und dann nach unten zu der Stelle zu scrollen, die ich sehen musste.
quelle
Wenn Sie bash verwenden, können Sie den Job mit Ctrl+ anhalten Zund anschließend abbrechen. Verwenden Sie dazu entweder die PID oder folgen Sie den Antworten von https://stackoverflow.com/questions/1624691/linux-kill-background-task (z. B. kill -9) %%)
quelle
tcsh
und strg + z funktioniert nicht ... habe das schon in frage gestellt.Öffnen Sie eine neue Konsole, indem Sie beispielsweise auf das Konsolensymbol klicken oder Ctrl+ Alt+ drücken F2. Dort eintreten
und Katze wird getötet, es sei denn, Sie haben eine veraltete NFS-Sperre oder eine Situation mit "unterbrechungsfreiem Schlaf" (lesen Sie auf einem fehlerhaften Sektor ohne Zeitüberschreitung).
quelle
cat
, dass es sich um das handelt, wascat
vor dem Tod auf das Terminal geschrieben und noch nicht gelesen oder vom Terminalemulator angezeigt wurde (und sich in einem (unter Linux etwa 64 KB großen) Puffer im pty-Treiber befindet). .drop_caches
kontrolliert die Seiten, die vom Kernel als Cache verwendet werden (normalerweise für ein Dateisystem), nicht die internen Puffer von Terminals, Netzwerktreibern und dergleichen - wenn dies der Fall wäre, hätte dies, wie Stéphane betont hat, schwerwiegende Konsequenzen (im Grunde würden Sie Daten verlieren). .killall -9 cat
auch andere Katzeninstanzen töten, die in anderen Prozessthreads noch gute Dinge bewirken könnten?Du kannst es damit versuchen
Anzeige zurücksetzen mit ctrl-j
Wenn cat noch läuft, öffne ein neues Terminal und starte das folgende Kommando:
pkill -9 -f cat
"Dadurch werden alle cat-Prozesse abgebrochen."quelle
pkill -f cat
würde auf meinem Desktop die Taskleiste von Xfce4 nicht mehr angezeigt.