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?
Si myName
est le nom du processus/de l'exécutable que vous voulez tuer, vous pouvez utiliser:
pkill myName
pkill
envoie par défaut le signal SIGTERM
(signal 15). Si vous voulez le SIGKILL
ou signal 9, utilisez:
pkilll -9 myName
Si myName
n'est pas le nom du processus ou, par exemple, est un argument d'une autre commande (longue), pkill
(ou pgrep
name__) 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)
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.
Avec pkill
et envoi signal 9, vous pouvez tuer le processus par son nom:
Sudo pkill -9 myName
Il existe deux commandes très soignées, pgrep
et pkill
name__, 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 pkill
name__).
$ pgrep -f firefox
23699
L'exécution de la même commande avec pkill
et -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.
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
.