J'exécute la commande ps -A | grep <application_name>
et j'obtiens la liste des processus comme ceci:
19440 ? 00:00:11 <application_name>
21630 ? 00:00:00 <application_name>
22694 ? 00:00:00 <application_name>
Je veux tuer tous les processus de la liste: 19440
, 21630
, 22694
.
J'ai essayé ps -A | grep <application_name> | xargs kill -9 $1
mais cela fonctionne avec des erreurs.
kill: illegal pid ?
kill: illegal pid 00:00:00
kill: illegal pid <application_name>
Comment puis-je le faire gracieusement?
nano /usr/bin/ffmpegk
. . . .ps -A | grep ffmpeg | awk '{print $1}' | xargs kill -9 $1
. . . .chmod a+rx /usr/bin/ffmpegk
kill -9
si aucun processus ne correspondgrep
, vous devriez utiliserawk
pour faire correspondre le nom:ps -A | awk "\$4 == \"$1\" { print \$1; }"
killall
peut faire ça.la source
killall --regexp "appl.*me"
Bien qu'il puisse y avoir différentes implémentations killall. Tu voisman killall
.kill -9 pid
je pense @ ŁukaszD.Tulikowski est la meilleure solution de travail spécialement pour les scripts bash.la source
Mon approche est similaire à celle de @
Łukasz D. Tulikowski
. Au lieu d'utilisergrep <application_name>
; J'ai utiliségrep "[a]pplication_name"
, qui ne correspond pas à sa propre ligne de commande de processus.L'expression entre crochets fait partie de la
grep
correspondance de modèle de classe de caractères du. (Référence) .Vous pouvez utiliser
awk
pour obtenir d'abord une colonne deps
sortie.Renvoie la liste des PID
Plus tard,
kill -9 $1
vous ajoutez une commande qui tue tous les PIDla source
grep
lieu d'utiliserawk
pour faire le test plus correctement?grep
fera correspondre les noms qui incluent la cible comme sous-chaîne, par exemple.