Dans bash, vous devriez pouvoir faire:
kill $(ps aux | grep '[p]ython csp_build.py' | awk '{print $2}')
Les détails de son fonctionnement sont les suivants:
- Le psvous donne la liste de tous les processus.
- Les grepfiltres basés sur votre chaîne de recherche[p]sont une astuce pour vous empêcher de récupérer legrepprocessus lui-même.
- Le awkjuste vous donne le deuxième champ de chaque ligne, qui est le PID.
- La $(x)construction signifie exécuterxpuis prendre sa sortie et la mettre sur la ligne de commande. La sortie de cepspipeline à l'intérieur de cette construction ci-dessus est la liste des ID de processus, vous vous retrouvez donc avec une commande commekill 1234 1122 7654.
Voici une transcription le montrant en action:
pax> sleep 3600 &
[1] 2225
pax> sleep 3600 &
[2] 2226
pax> sleep 3600 &
[3] 2227
pax> sleep 3600 &
[4] 2228
pax> sleep 3600 &
[5] 2229
pax> kill $(ps aux | grep '[s]leep' | awk '{print $2}')
[5]+  Terminated              sleep 3600
[1]   Terminated              sleep 3600
[2]   Terminated              sleep 3600
[3]-  Terminated              sleep 3600
[4]+  Terminated              sleep 3600
et vous pouvez le voir terminer tous les dormeurs.
Expliquant le grep '[p]ython csp_build.py'bit un peu plus en détail:
Lorsque vous ne sleep 3600 &suiviez par ps -ef | grep sleep, vous avez tendance à deux processus avec sleepen elle, la sleep 3600et grep sleep(parce qu'ils ont tous les deux sleepen eux, ce n'est pas sorcier).
Cependant, ps -ef | grep '[s]leep'ne créera pas de processus avec sleep, il crée à la place grep '[s]leep'et voici le bit délicat: le grepne le trouve pas car il recherche l'expression régulière "n'importe quel caractère de la classe de caractères [s](qui est s) suivi par leep.
En d'autres termes, il est à la recherche, sleepmais le processus grep est celui grep '[s]leep'qui ne s'y trouve pas sleep.
Quand on me l'a montré (par quelqu'un ici sur SO), j'ai immédiatement commencé à l'utiliser parce que
- c'est un processus de moins que l'ajout | grep -v grep; et
- c'est élégant et sournois, une combinaison rare :-)