Wie kann ich einen Prozess mit seinem Namen beenden?

44

Manchmal bemerke ich, dass der Prozess Pythonaufgehängt hat. Dann werde ich es über den Aktivitätsmonitor töten und alles ist in Ordnung.

Ich möchte diesen Prozess stattdessen im Terminal beenden. Das PIDnachzuschlagen scheint jedoch unnötig, da es nur einen Prozess mit dem Namen gibt Python.

Ist es möglich, einen Prozess anhand seines eindeutigen Namens zu beenden?

Gentmatt
quelle

Antworten:

52

Sie sollten in der Lage sein, den Befehl auszuführen sudo killall Python.

Sie müssen als root ausgeführt werden, da Python nicht dem Benutzer, sondern root gehört.

Matt Love
quelle
Ich habe das gemacht:No matching processes belonging to you were found
gentmatt
1
Der Python-Prozess gehört nicht Ihrem Benutzer. Versuchen Sie es als root statt: sudo killall Python.
HenningJ
1
@ HenningJ Sudo arbeitete aus irgendeinem Grund. Ich habe gerade gesehen, dass der Prozess mir gehört. Ich könnte den Prozess beenden, ohne sudoihn zu verwenden PID. Warum?
Gentmatt
1
Ich denke, es liegt daran, dass die Verwendung einer PID nicht benutzer- / root-spezifisch ist, während ein Prozessname dies ist. Ich bearbeite diese Antwort, um sie wiederzugeben sudo.
Matt Love
Dies funktionierte auch für mehrere gleichnamige Prozesse, nice
chrismarx
21
sudo killall -s SIGINT "process name"

Wenn Sie kein Sudo sein können, weil es nach einem Passwort fragt und ich glaube, dass Sie das nicht in einem Skript wollen. pkill kommen zur rettung :)

pkill -9 "process name"
Roshan Mehta
quelle
5

Sie können Anwendungen beenden, indem Sie Activity Monitor.app als GUI-Lösung verwenden. Das wäre ein einfaches "Force Quit". In manchen Situationen funktioniert das jedoch nicht immer aus unterschiedlichen Gründen!

Die im obigen Kommentar erwähnte Befehlszeilenlösung bietet dem Benutzer viel mehr Optionen. sudo killall Pythonoder wenn es sich um einen laufenden Programmprozess handelt, wird sudo killall /Applications/Whatever.appder Prozess auch zum Beenden gezwungen.

Sie können auch das Beenden eines Prozesses erzwingen, indem Sie die zugewiesene PID verwenden . Im Fall von Activity Monitor.app wäre es kill 25794oderkill -9 25794

Bildbeschreibung hier eingeben

Einige weitere Details:

Das Kill-Programm im Terminal erzwingt einfach das Beenden eines Programms, wie per Fernbedienung. (Es funktioniert sogar, wenn Sie von einem entfernten Standort aus SSH auf Ihren Mac ausführen. Folgen Sie dem Befehl kill mit der Prozess-ID-Nummer (kurze PID) des Programms, das Sie beenden möchten.

Sofern Sie nicht auch sudo verwenden, können Sie nur Programme beenden, die Sie "besitzen" - und die unter Ihrem Konto ausgeführt werden. (Das Betriebssystem selbst - root - führt immer eigene Programme aus, und es ist technisch möglich, dass andere Personen, die sich von unterwegs einwählen, auch dann eigene Programme ausführen, wenn Sie den Mac verwenden!)

Die -9Flagge ist eine "nicht fangbare, nicht ignorierbare Tötung". Mit anderen Worten, es ist ein industrieller Attentäter, der keine Gnadengesuche von dem Programm akzeptiert, das Sie töten.

v2r
quelle
5

Auch wenn es nicht PID verwenden, finde ich das ziemlich effizient sein folgendes:

ps aux | grep "String or name of process"

Diese Zeile gibt eine Vielzahl von Informationen über den / die Abgleichsprozess (e) zurück, und Sie können killoder was auch immer von dort aus.

soxman
quelle
2
pkill -f "process name"

Basierend auf https://stackoverflow.com/a/22334807/1243763

Samir
quelle
1
Gibt es eine PIDOF auf MacOS? Und warum nicht pkill verwenden, das nicht das Problem des zusätzlichen Prozesses hat?
Nohillside
stimme zu und ich habe das verpasst. Ich hatte pidofbinär als nicht-standard Alias ​​von ps -e -o pid,args | grep -E "\b$1\b" | awk "{print \$1}" | tr '\n' ' '. Also pkill -fmacht mehr Sinn.
Samir