Wie kann ich einen Prozess unter MacOS beenden?

77

Ich habe es versucht, kill -9 698aber der Prozess ist nicht gestorben.

$ 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
lucius
quelle
1
Ist es nicht eine gute Praxis, zuerst auszuführen kill -15 ...und wenn das dann nicht funktioniert kill -1 ...und wenn das dann nicht funktioniert kill -9 ...?
Waxwing

Antworten:

128

Wenn Sie versuchen, -9 zu beenden, haben Sie die richtige PID und nichts passiert, dann haben Sie keine Berechtigung, den Prozess abzubrechen.

Lösung:

$ sudo kill -9 PID

Okay, sicher gibt Mac OS / X eine Fehlermeldung für diesen Fall aus:

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

Wenn Sie also keine Fehlermeldung erhalten, erhalten Sie irgendwie nicht die richtige PID.

Charlie Martin
quelle
Könnte richtig sein, aber ich erinnere mich an Kill, der eine Fehlermeldung gab, wenn der Prozess nicht dem Killer gehörte.
Paxdiablo
Gott, das ist eines dieser Verhaltensweisen, die sich von UNIX zu UNIX unterscheiden. Es ist wünschenswert , diesen Fehler nicht zu haben, da es sich um einen verdeckten Kanal handelt. Auf der anderen Seite ist es eine nützliche Fehlermeldung.
Charlie Martin
Welches UNIX gibt hier keinen Fehler aus? Ich habe BSD, Linux und Solaris getestet und alle geben eine Form des obigen Fehlers (EPERM) an.
Rob Napier
Ich weiß es nicht, obwohl ich Solaris mit vertrauenswürdigen Erweiterungen erraten würde (das Problem mit verdeckten Kanälen), wenn ich raten müsste. Beachten Sie auch, dass es nach dem Kill ein paar leere Zeilen gibt. Ich wundere mich warum?
Charlie Martin
14

In einigen Fällen möchten Sie möglicherweise den gesamten Prozess beenden, der in einem bestimmten Port ausgeführt wird. Zum Beispiel, wenn ich eine Node-App auf einem 3000-Port ausführe und diese beenden und eine neue starten möchte. dann fand ich diesen Befehl nützlich.

Suchen Sie die Prozess-IDs, die auf TCP-Port 3000 ausgeführt werden, und beenden Sie sie

kill -9 `lsof -i TCP:3000 | awk '/LISTEN/{print $2}'`
Gajen Sunthara
quelle
genau das, was benötigt wird
Humoyun Ahmad
6

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

killall Dock

Wenn Sie dies nicht tun, können Sie den Aktivitätsmonitor öffnen und suchen.

Garrett
quelle
Ich denke, es könnte eine schlechte Idee sein, diesen Befehl tatsächlich auszuführen. Ich nehme an, Sie könnten das Dock ziemlich einfach neu starten, aber ich weiß nicht, ob es bei diesem Ansatz Probleme geben würde.
Chris Lutz
Es war nur ein Beispiel für einen Prozess, ich möchte nicht, dass er sein Dock tötet. Ich gehe davon aus, dass es killalleine andere Saite gibt als töten.
Garrett
3

Angesichts des Pfads zu Ihrem Programm gehe ich davon aus, dass Sie dies derzeit unter Xcode ausführen und sich wahrscheinlich an einem Debug-Haltepunkt befinden. Prozesse können in diesem Status aufgrund der zugrunde liegenden Implementierung von Haltepunkten nicht abgebrochen werden.

Der erste Schritt wäre, zu Ihrem Xcode-Prozess zu gehen und das Debuggen zu beenden. Wenn Sie aus irgendeinem seltsamen Grund den Zugriff auf Xcode verloren haben (möglicherweise hat Xcode den Zugriff auf seinen GDB-Unterprozess verloren), besteht die Lösung darin, den GDB-Prozess abzubrechen. Im Allgemeinen besteht die Lösung hier darin, den übergeordneten Prozess abzubrechen. In Ihrem Fall ist dies PID 811 (die dritte Spalte).

In diesem Fall muss -9 nicht verwendet werden.

Rob Napier
quelle
3

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

ArcaneVibe
quelle
Ja, versuchen Sie es mit sudo kill -9 PID - das hat bei mir funktioniert (idk, warum wir es nicht vom Benutzer töten können und eine Erhöhung benötigen)
Rob
2

Wenn kill -9es nicht funktioniert, wird es auch nicht killall(oder sogar killall -9was wäre "intensiver"). Anscheinend steckt der Chromprozess in einem nicht unterbrechbaren Systemaufruf (dh im Kernel, nicht im Userland) - ich hätte nicht gedacht, dass MacOSX noch einen davon übrig hat, aber ich denke, es gibt immer noch einen :-(. Wenn das so ist Der Prozess verfügt über ein steuerndes Terminal, das Sie wahrscheinlich im Hintergrund hinterlegen und beenden können. Andernfalls (oder wenn das intensive Töten nicht funktioniert, selbst wenn der Prozess beendet ist) habe ich keine Ideen mehr und denke, Sie müssen möglicherweise neu starten :-(.

Alex Martelli
quelle
2

Ich habe erfahren, dass Sie, wenn kill -9 PIDes nicht funktioniert und Sie den Prozess besitzen, ihn verwenden können, kill -s kill PIDwas etwas überraschend ist, wie die Manpage sagt, dass Sie es können kill -signal_number PID.

Koan
quelle
kill -s kill 9half mir
Boraas
0

Ich hatte kürzlich ein ähnliches Problem, bei dem der Atom-Editor nicht geschlossen werden kann. Weder antwortete. Kill / kill -9 / Force Exit aus dem Aktivitätsmonitor - hat nicht funktioniert. Schließlich musste ich meinen Mac neu starten, um die App zu schließen.

helloworld134
quelle
0

Suchen Sie im Rampenlicht nach Aktivitätsmonitor. Sie können das vollständige Entfernen aller Anwendungen von hier erzwingen.

Geben Sie hier die Bildbeschreibung ein

prashant.kr.mod
quelle