web-dev-qa-db-fra.com

Puis-je enchaîner pgrep avec kill?

Je me suis rendu compte que | est utilisé pour envoyer les résultats de la première commande à l'autre. Je voudrais tuer tous les processus qui correspondent à un nom.
C'est ce que fait normalement pgrep:

$ pgrep name
5089
5105

Et plusieurs arguments semblent fonctionner avec kill:

Sudo kill 5089 5105

Mais c'est faux:

pgrep name | kill

Alors, comment le faire correctement?

Essaye ça:

pgrep name | xargs kill

Si tu utilises pgrep name | kill, la sortie de pgrep name est un flux vers stdin de kill. Parce que kill ne lit pas les arguments de stdin, cela ne fonctionnera donc pas.

En utilisant xargs, il construira des arguments pour kill à partir de stdin. Exemple:

$ pgrep bash | xargs echo
5514 22298 23079
46
cuonglm

Cela devrait fonctionner:

pkill name

Je suggère également de lire la page de manuel.

21

Répondre au général plutôt qu'au spécifique ...

Les tuyaux permettent de transmettre la sortie d'un programme en tant qu'entrée à un autre programme.

Il semble que vous essayez d'utiliser la sortie d'un programme comme arguments de ligne de commande vers un autre programme, ce qui est différent.

Pour ce faire, utilisez substitution de commande .

Par exemple, si vous souhaitez exécuter

Sudo kill 5089 5105

Et vous avez une commande pgrep name qui génère 5089 5105

Vous les mettez ensemble comme

Sudo kill $(pgrep name)
5
Mikel