it-swarm.com.de

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

Ctrl + C funktioniert nicht immer, um den aktuellen Prozess abzubrechen (z. B. wenn dieser Prozess bei bestimmten Netzwerkvorgängen beschäftigt ist). In diesem Fall sehen Sie nur "^ C" an Ihrem Cursor und können sonst nicht viel tun.

Was ist der einfachste Weg, um diesen Prozess zum Absterben zu zwingen, ohne mein Terminal zu verlieren?

Zusammenfassung der Antworten: Normalerweise können Sie Ctrl + Z Um den Prozess in den Ruhezustand zu versetzen, führen Sie kill -9 _process-pid_ aus. Dort finden Sie die pid des Prozesses mit ps und anderen Tools. Auf Bash (und möglicherweise anderen Shells) können Sie kill -9 %1 (oder '% N' im Allgemeinen) ausführen, was einfacher ist. Ob Ctrl + Z funktioniert nicht, Sie müssen ein anderes Terminal öffnen und von dort aus kill .

168
Dustin Boswell

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

Die meisten Muscheln binden Ctrl + C um "ein SIGINT Signal an das aktuell im Vordergrund laufende Programm zu senden". Sie können die verschiedenen Signale über Man-Signal lesen:

 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

(Welches ist, was die meisten Muscheln tun, wenn Sie drücken Ctrl + 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 mit dem Befehl kill senden. Um Ihren Prozess des Hängens/Zombies zu beenden, suchen Sie einfach die Prozess-ID (PID). Verwenden Sie zum Beispiel pgrep oder ps und dann kill:

 % kill -9 PID
115
akira

Ob Ctrl+C (SIGINT) funktioniert nicht, versuchen Sie es Ctrl+\ (SIGQUIT). Dann versuche es Ctrl+Z (SIGTSTP). Wenn Sie dadurch zu einer Shell-Eingabeaufforderung zurückkehren, geben Sie kill für die Prozess-ID ein. (Dies ist standardmäßig das SIGTERM-Signal, 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 dies nicht funktioniert, wechseln 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 sollten Sie kill -KILL, a.k.a. kill -9 ausführen, da es dem Prozess keine Möglichkeit gibt, sauber abzubrechen, seine geöffneten Dateien zu synchronisieren, seine temporären Dateien zu entfernen, Netzwerkverbindungen zu schließen usw.

110
Teddy

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 stellen)

Dann können Sie kill oder kill -9 angeben, wenn Sie die Prozess-ID angeben (die erhalten Sie von ps a).

30
Daniel Beck

Siehe hierzu auch link .

Ctrl+Z: pausiere einen Prozess.

Ctrl+C: Bitten Sie höflich darum, den Prozess jetzt zu beenden.

Ctrl+\: Beende gnadenlos den Prozess, der gerade im Vordergrund steht

28
RoboAlex

Normalerweise können Sie den Vorgang immer noch stoppen (Ctrl + Z) und dann kill -9 verwenden. Für kill -9 benötigen Sie zuerst Prozess-PID . Bei Hintergrundjobs ist kill -9 %1 die einfachste Methode. Wenn Sie sich nicht sicher sind, wie viele Hintergrundjobs Sie beenden möchten, führen Sie jobs aus.

Alternativ finden Sie die Prozess-ID mit

ps

Dann kannst du rennen

kill -9 <Appropriate PID from ps output>
13
Olli

1) Wenn Sie sich in der Konsole befinden und sich im Mehrbenutzermodus befinden, können 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 nach ID-Nummer beenden.

2) Wenn Sie aus der Ferne verbunden sind, tun das gleiche über eine andere Terminalsitzung.

Sie können das Leben auch ein wenig erleichtern, indem Sie htop installieren, eine vielseitigere Version von top, mit der Sie laufende Prozesse selektiv beenden können. Die meisten Distributionen haben ein Repo.

3) Wenn Sie sich gerade in einer blockierten SSH-Sitzung befinden (z. B. auf einem anderen System), drücken Sie die Escape-Taste Tilde (~) und drücken Sie dann STRG-Z, um zur Host-Sitzung zurückzukehren kann den steckt ssh Prozess töten oder es zu Timeout warten, die nach einer gewissen Zeit der Inaktivität der meisten Schweller tun.

4
Linker3000

Eine einfachere Lösung für Bash (und andere Shells?) Ist:

Ctrl-z      followed by     kill -9 %1

wobei sich '% 1' auf die Jobnummer bezieht, die getötet wird. Möglicherweise ist es '% 2' (oder etwas anderes), wenn Sie bereits andere Jobs haben, die schlafen. Sie können sehen, um welche Auftragsnummer 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
Dustin Boswell

Möglicherweise befindet sich in Ihrem/etc/profile eine mit SIGINT (2) gesetzte Falle. Wenn ja, entfernen Sie es. Melden Sie sich ab und wieder an und Sie sollten gut sein.

0
TechNo_phile

Wenn Sie tmux oder screen verwenden und keines der oben genannten Verfahren funktioniert, können Sie den Bereich dennoch mit <prefix> x beenden. Der Vorgang wird dann ebenfalls beendet.

0
ospider