web-dev-qa-db-fra.com

Comment puis-je tuer un processus avec une phrase dans son nom?

J'ai besoin de tuer un processus qui contient myName dans sa description. Actuellement je fais:

ps -ax |grep myName
I see PID
kill -9 PID

Comment puis-je faire la même chose avec une seule commande sans entrer le PID?

9
vico

Si myNameest le nom du processus/de l'exécutable que vous voulez tuer, vous pouvez utiliser:

pkill myName

pkillenvoie par défaut le signal SIGTERM(signal 15). Si vous voulez le SIGKILLou signal 9, utilisez:

pkilll -9 myName

Si myNamen'est pas le nom du processus ou, par exemple, est un argument d'une autre commande (longue), pkill(ou pgrepname__) risque de ne pas fonctionner comme prévu. Vous devez donc utiliser l'option -f. De 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.

Alors:

pkill -f myName

ou

kill -9 $(pgrep -f myName)
14
Ron

Avec un nom de commande, utilisez:

pkill -9 myscript

Si vous recherchez une chaîne dans la ligne de commande:

kill -9 $(ps ax | grep myName | fgrep -v grep | awk '{ print $1 }')

Je dois vous avertir: la commande ci-dessus peut envoyer un signal SIGKILL à plusieurs processus.

6
Jay jargot

Avec pkill et envoi signal 9, vous pouvez tuer le processus par son nom:

Sudo pkill -9 myName
2
siz

Il existe deux commandes très soignées, pgrepet pkillname__, qui permettent de saisir un terme de recherche ou une partie du nom de la commande. Elles fournissent le ou les PID du processus ou le suppriment (en cas de pkillname__).

$ pgrep -f firefox                                                             
23699

L'exécution de la même commande avec pkillet -f marquera la fermeture de toutes les fenêtres firefox.

L'indicateur -f est nécessaire spécifiquement pour effectuer une recherche sur toute la ligne de commande d'un processus.

1

Vous pouvez faire un simple for loop sur tous les PID associés au nom de processus spécifique, comme ceci:

$ for i in $( ps ax | awk '/[m]yName/ {print $1}' ); do kill ${i}; done

Cela supprimera tous les processus contenant le mot Word: myName.

1
krt