Um das Problem zu verstehen, warum Ctrl + C nicht funktioniert, ist es sehr hilfreich zu verstehen, was passiert, wenn Sie darauf drücken:
Die meisten Shells binden Ctrl + C um "ein SIGINT-Signal an das Programm zu senden, das gerade im Vordergrund läuft". Sie können die verschiedenen Signale über man signal nachlesen:
SIGINT 2 Term Interrupt from keyboard
Programme können dieses Signal ignorieren, wie sie auch SIGTSTP ignorieren können:
SIGTSTP 18,20,24 Stop Stop typed at tty
(Das machen die meisten Shells, wenn Sie Strg drücken + Z , weshalb es nicht garantiert funktioniert.)
Es gibt einige Signale, die vom Prozess nicht ignoriert werden können:SIGKILL, SIGSTOP und einige andere. Sie können diese Signale über den Kill-Befehl senden. Um also Ihren Hanging / Zombieying-Prozess zu beenden, suchen Sie einfach die Prozess-ID (PID). Verwenden Sie beispielsweise pgrep
oder ps
und dann kill
es:
% kill -9 PID
Wenn Strg +C (SIGINT) funktioniert nicht, versuchen Sie es mit Ctrl +\ (SIG QUIT). Versuchen Sie dann Strg +Z (SIGTSTP). Wenn Sie zu einem Shell-Prompt zurückkehren, führen Sie kill
aus auf der Prozess-ID. (Dies ist standardmäßig das Signal SIGTERM, das Sie mit kill -TERM
angeben können . In einigen Shells können Sie möglicherweise %1
verwenden um auf die PID zu verweisen.) Wenn das nicht funktioniert, gehen Sie zu einem anderen Terminal oder einer anderen SSH-Sitzung und führen Sie kill
aus oder kill -TERM
auf der Prozess-ID. Nur als letztes Mittel solltest du kill -KILL
machen , auch bekannt als kill -9
, da es dem Prozess keine Möglichkeit gibt, sauber abzubrechen, seine offenen Dateien zu synchronisieren, seine temporären Dateien zu entfernen, Netzwerkverbindungen zu schließen usw.
Siehe auch diesen Link.
Strg +Z :Prozess anhalten.
Strg +C :den Prozess höflich bitten, jetzt beendet zu werden.
Strg +\ :beendet gnadenlos den gerade im Vordergrund befindlichen Prozess