2011-02-09 08:49:24 +0000 2011-02-09 08:49:24 +0000
183
183
Advertisement

Was ist zu tun, wenn Strg + C einen Prozess nicht beenden kann?

Advertisement

Strg + C funktioniert nicht immer, um den aktuellen Prozess zu beenden (z.B. wenn dieser Prozess bei bestimmten Netzwerkoperationen beschäftigt ist). In diesem Fall sehen Sie nur “^C” am Cursor und können nicht viel mehr tun.

Wie kann ich am einfachsten erzwingen, dass dieser Prozess jetzt stirbt, ohne mein Terminal zu verlieren?

Zusammenfassung der Antworten: Normalerweise können Sie Strg + Z drücken, um den Prozess in den Ruhezustand zu versetzen, und dann kill -9 _process-pid_ ausführen, wo Sie die Pid des Prozesses mit ps und anderen Werkzeugen finden. Auf Bash (und möglicherweise anderen Shells) können Sie kill -9 %1 (oder ‘%N’ im Allgemeinen) tun, was einfacher ist. Wenn Strg + Z nicht funktioniert, müssen Sie ein anderes Terminal öffnen und von dort aus killen.

Advertisement
Advertisement

Antworten (9)

127
127
127
2011-02-09 09:13:54 +0000

Um das Problem zu verstehen, warum Strg + C nicht funktioniert, ist es sehr hilfreich zu verstehen, was passiert, wenn Sie es drücken:

Die meisten Shells binden Strg + C, um “ein SIGINT Signal an das Programm zu senden, das gerade im Vordergrund läuft”. Sie können über die verschiedenen Signale über man signal nachlesen:

SIGINT 2 Term Interrupt from keyboard

Programme können dieses Signal ignorieren, da sie auch SIGTSTP ignorieren können:

SIGTSTP 18,20,24 Stop Stop typed at tty

(Was die meisten Shells tun, wenn Sie Strg + Z drücken, 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 mit dem Befehl kill senden. Um also Ihren Hänge-/Zombie-Prozess zu töten, suchen Sie einfach die Prozess-ID (PID). Verwenden Sie zum Beispiel pgrep oder ps und dann kill es:

% kill -9 PID
119
119
119
2011-02-09 09:36:15 +0000

Wenn Strg+C (SIGINT) nicht funktioniert, versuchen Sie Strg+\ (SIGQUIT). Versuchen Sie dann Strg+Z (SIGTSTP). Wenn Sie dadurch zu einem Shell-Prompt zurückkehren, machen Sie kill auf der Prozess-ID. (Standardmäßig wird das SIGTERM-Signal verwendet, 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 SSH-Sitzung und geben Sie kill oder kill -TERM für die Prozess-ID ein. Nur als letztes Mittel sollten Sie kill -KILL, auch bekannt als kill -9, tun, da es dem Prozess keine Chance gibt, sauber abzubrechen, seine offenen Dateien zu synchronisieren, seine temporären Dateien zu entfernen, Netzwerkverbindungen zu schließen usw.

37
Advertisement
37
37
2012-06-19 03:03:03 +0000
Advertisement

Siehe auch diesen link .

Strg+Z: einen Prozess anhalten.

Strg+C: den Prozess höflich bitten, jetzt abzubrechen.

Strg+: den Prozess, der gerade im Vordergrund steht, gnadenlos beenden

33
33
33
2011-02-09 08:53:17 +0000

Drücken Sie Strg-Z, um das Programm anzuhalten und in den Hintergrund zu stellen :

Suspend the program currently running and put it in the background.
This does not stop the process as it does in VMS!

(Mit fg wieder in den Vordergrund bringen)

Dann können Sie kill oder kill -9 es mit seiner Prozess-ID (die erhalten Sie von ps a).

13
Advertisement
13
13
2011-02-09 08:53:41 +0000
Advertisement

In der Regel können Sie den Prozess immer noch anhalten (Strg + Z) und dann kill -9 verwenden. Für kill -9 benötigen Sie zuerst die Prozess PID . Für Hintergrund-Jobs ist kill -9 %1 die einfachste Methode - wenn Sie sich nicht sicher sind, wie viele Hintergrund-Jobs Sie beenden möchten, führen Sie jobs aus.

Alternativ können Sie die Prozess-ID mit

ps

finden Dann können Sie

kill -9 <Appropriate PID from ps output>
``` ausführen
5
5
5
2011-02-09 22:40:53 +0000

Eine einfachere Lösung für Bash (und andere Granaten?) ist:

Ctrl-z followed by kill -9 %1

wobei ‘%1’ sich auf die Auftragsnummer bezieht, die getötet wird. Es könnte ‘%2’ (oder etwas anderes) sein, wenn Sie bereits andere Arbeitsplätze schlafen haben. Sie können sehen, um welche Jobnummer es sich handelt, wenn Sie Strg-z drücken:

[1]+ Stopped <process name>

Beachten Sie, dass “kill” die Shell-Version von kill ist, nicht /bin/kill.

4
Advertisement
4
4
2011-02-09 09:01:45 +0000
Advertisement

1) Wenn Sie sich auf der Konsole und im Mehrbenutzermodus befinden, könnten Sie STRG-ALT-Fn drücken und sich auf einem anderen Bildschirm anmelden, ps -ef | grep <myprocessname> oder pidof <myprocessname> verwenden und dann -9 den Prozess über die ID-Nummer beenden.

2) Wenn Sie über eine Remote-Verbindung verbunden sind, tun Sie dasselbe über eine andere Terminalsitzung.

Sie könnten sich das Leben auch etwas leichter machen, indem Sie htop installieren, eine vielseitigere Version von top, die es Ihnen erlaubt, laufende Prozesse selektiv zu beenden. Die meisten Distributionen haben htop in einem Repo.

3) Wenn Sie gerade in einer hängenden ssh-Sitzung (z.B. auf einem anderen System) feststecken, versuchen Sie die Tilde (~) zu drücken, die die Escape-Taste ist, und drücken Sie dann STRG-Z, um zur Host-Sitzung zurückzukehren, dann können Sie den hängenden ssh-Prozess beenden oder warten, bis er ein Timeout hat, was die meisten erst nach einer Zeit der Inaktivität tun.

0
0
0
2017-04-18 10:41:06 +0000

Wenn Sie tmux oder screen verwenden und keines der obigen Verfahren funktioniert, könnten Sie die Scheibe immer noch bis <prefix> x töten, dann wird der Prozess ebenfalls beendet.

0
Advertisement
0
0
2017-10-26 13:16:30 +0000
Advertisement

Es gibt vielleicht eine Falle, die mit SIGINT(2) in Ihrem /etc/-Profil gestellt wurde. Wenn ja, entfernen Sie sie. Melden Sie sich ab und loggen Sie sich wieder ein und Sie sollten gut sein.

Advertisement

Verwandte Fragen

6
10
11
5
13
Advertisement
Advertisement