2009-05-24 9 views
43

Ich versuchte kill -9 698, aber der Prozess ist nicht gestorben.Wie kann ich einen Prozess in MacOS beenden?

$ ps -ef | grep chromium 
    502 698 811 0 0:01.24 ??   0:07.28 /Users/lucius/chromium/src/xcodebuild/Debug/Chromium.app/Contents/MacOS/Chromium 
    502 854 732 0 0:00.00 ttys001 0:00.00 grep chromium 
$ kill -9 698 


$ ps -ef | grep chromium 
    502 698 811 0 0:01.24 ??   0:07.28 /Users/lucius/chromium/src/xcodebuild/Debug/Chromium.app/Contents/MacOS/Chromium 
    502 854 732 0 0:00.00 ttys001 0:00.00 grep chromium 

Antwort

4

Wenn Sie den Prozessnamen kennen, können Sie verwenden:

killall Dock 

Wenn Sie nicht Sie Activity Monitor und es finden öffnen können.

+0

denke ich, es wäre eine schlechte Idee, tatsächlich diesen Befehl auszuführen. Ich nehme an, Sie könnten das Dock ziemlich einfach neu starten, aber ich weiß nicht, ob es irgendwelche Probleme mit diesem Ansatz geben würde. –

+0

Es war nur ein Beispiel für einen Prozess, ich möchte nicht, dass er sein Dock tötet. Ich gehe davon aus, dass 'killall' eine andere Saite als Töten braucht. – Garrett

77

Wenn Sie versuchen, -9 es zu töten, haben Sie die richtige PID, und nichts passiert, dann haben Sie keine Berechtigungen, den Prozess zu beenden.

Lösung:

$ sudo kill -9 PID 

Okay, sicher genug, Mac OS/X hat für diesen Fall eine Fehlermeldung:

$ kill -9 196 
-bash: kill: (196) - Operation not permitted 

Also, wenn Sie nicht, wenn es darum eine Fehlermeldung, Sie bekommen irgendwie nicht die richtige PID.

+0

Könnte stimmen, aber ich denke, ich erinnere mich daran, dass eine Fehlermeldung ausgegeben wurde, wenn der Prozess nicht im Besitz des Mörders war. – paxdiablo

+0

Gott, das ist eines dieser Verhaltensweisen, die sich von UNIX zu UNIX unterscheiden. Es ist wünschenswert * diesen Fehler * nicht zu haben, weil es ein verdeckter Kanal ist; Auf der anderen Seite ist es eine nützliche Fehlermeldung. –

+0

Welches UNIX gibt hier keinen Fehler? Ich habe BSD, Linux und Solaris getestet und alle geben eine Form des obigen Fehlers (EPERM). –

2

Wenn kill -9 nicht funktioniert, dann auch nicht killall (oder sogar killall -9, die "intensiver" wäre). Anscheinend ist der Chromprozess in einem nicht unterbrechbaren Systemaufruf festgefahren (dh im Kernel, nicht im Userland) - glaubte nicht, dass MacOSX irgendwelche davon übrig hatte, aber ich denke, es gibt immer noch einen :-(. Wenn Prozess hat eine kontrollierende Terminal Sie können Hintergrund wahrscheinlich und töten es im Hintergrund, sonst (oder wenn die intensive Tötung funktioniert nicht einmal der Prozess ist bakcgrounded) Ich habe keine Ideen und ich denke, Sie müssen möglicherweise neu starten :-(.

2

Angesichts der Pfad zu Ihrem Programm, nehme ich an, Sie führen dies derzeit unter Xcode, und wahrscheinlich an einem Debug-Breakpoint. Prozesse können nicht in diesem Zustand wegen der zugrunde liegenden Implementierung von Breakpoints getötet werden.

Der erste Schritt wäre, zu Ihrem Xcode-Prozess zu gehen und das Debuggen zu stoppen Ein seltsamer Grund, warum Sie den Zugriff auf Xcode verloren haben (vielleicht hat Xcode den Zugriff auf seinen gdb-Unterprozess verloren), besteht die Lösung darin, den gdb-Prozess zu beenden. Im Allgemeinen besteht die Lösung darin, den Elternprozess zu beenden. In Ihrem Fall ist dies PID 811 (die dritte Spalte).

In diesem Fall muss -9 nicht verwendet werden.

1

Ich habe erlebt, dass, wenn kill -9 PID nicht funktioniert und Sie den Prozess besitzen, können Sie kill -s kill PID verwenden, die irgendwie überraschend ist, wie die Man-Seite sagt, können Sie kill -signal_number PID.

+0

'kill -s kill 9' half mir – boraas

2

Ich habe gerade nach diesem gesucht, da ich in einer ähnlichen Situation bin, und statt kill -9 698 versuchte ich sudo kill 428, wo 428 war die PID des Prozesses, den ich versuche zu töten. Es funktionierte sauber für mich, ohne Bindestrich '-' Charakter. Ich hoffe, es hilft!

+0

Ja versuche sudo kill -9 PID - das funktionierte für mich (idk warum wir es nicht vom Benutzer töten können und eine Erhöhung benötigen) – Rob

3

In einigen Fällen möchten Sie möglicherweise den gesamten Prozess abbrechen, der an einem bestimmten Port ausgeführt wird. Zum Beispiel, wenn ich eine Knoten-App auf Port 3000 betreibe und ich möchte das beenden und eine neue starten; dann fand ich diesen Befehl nützlich.

Finden Sie den Prozess-IDs auf TCP-Port 3000 läuft und tötet es

kill -9 `lsof -i TCP:3000 | awk '/LISTEN/{print $2}'` 
Verwandte Themen