
Ich muss einen Prozess beenden, der myName
in seiner Beschreibung Folgendes enthält. Derzeit mache ich Folgendes:
ps -ax |grep myName
I see PID
kill -9 PID
Wie kann ich dasselbe mit einem Befehl tun, ohne die PID einzugeben?
Antwort1
Wenn myName
der Name des Prozesses/der ausführbaren Datei ist, den/die Sie beenden möchten, können Sie Folgendes verwenden:
pkill myName
pkill
sendet standardmäßig das SIGTERM
Signal (Signal 15). Wenn Sie das Signal SIGKILL
oder Signal 9 möchten, verwenden Sie:
pkill -9 myName
Wenn myName
es sich nicht um den Prozessnamen handelt oder beispielsweise um ein Argument für einen anderen (langen) Befehl, funktioniert pkill
(oder pgrep
) möglicherweise nicht wie erwartet. Sie müssen also die -f
Option verwenden.
Aus man kill
:
-f, --full
The pattern is normally only matched against the process name.
When -f is set, the full command line is used.
NOTES
The process name used for matching is limited to the 15 characters present
in the output of /proc/pid/stat. Use the -f option to match against the
complete command line, /proc/pid/cmdline.
Also:
pkill -f myName
oder
kill -9 $(pgrep -f myName)
Antwort2
Verwenden Sie mit dem Namen eines Befehls:
pkill -9 myscript
Wenn Sie in der Befehlszeile nach einer Zeichenfolge suchen:
kill -9 $(ps ax | grep myName | fgrep -v grep | awk '{ print $1 }')
Ich muss Sie warnen: Der obige Befehl kann ein SIGKILL
Signal an mehr als einen Prozess senden.
Antwort3
Es gibt zwei sehr praktische Befehle pgrep
, pkill
die die Eingabe eines Suchbegriffs oder eines Teils des Befehlsnamens ermöglichen und dann entweder die PID(s) des Prozesses bereitstellen oder (im Fall von pkill
) den Prozess beenden.
$ pgrep -f firefox
23699
Wenn Sie denselben Befehl mit pkill
und -f
Flag ausführen, werden alle Firefox-Fenster geschlossen.
Das -f
Flag wird insbesondere benötigt, um die komplette Befehlszeile eines Prozesses zu durchsuchen.
Antwort4
Sie können eine einfache Abfrage for loop
über alle PIDs durchführen, die mit dem jeweiligen Prozessnamen verknüpft sind, und zwar wie folgt:
$ for i in $( ps ax | awk '/[m]yName/ {print $1}' ); do kill ${i}; done
Dadurch werden alle Prozesse beendet, die das Wort enthalten myName
:.