Wie kann ich einen Prozess beenden, der eine Phrase im Namen enthält?

Wie kann ich einen Prozess beenden, der eine Phrase im Namen enthält?

Ich muss einen Prozess beenden, der myNamein 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 myNameder Name des Prozesses/der ausführbaren Datei ist, den/die Sie beenden möchten, können Sie Folgendes verwenden:

pkill myName

pkillsendet standardmäßig das SIGTERMSignal (Signal 15). Wenn Sie das Signal SIGKILLoder Signal 9 möchten, verwenden Sie:

pkill -9 myName

Wenn myNamees 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 -fOption 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 SIGKILLSignal an mehr als einen Prozess senden.

Antwort3

Es gibt zwei sehr praktische Befehle pgrep, pkilldie 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 pkillund -fFlag ausführen, werden alle Firefox-Fenster geschlossen.

Das -fFlag 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:.

verwandte Informationen