Posso encadear o pgrep com o kill?

23

Tenho notado que | é usado para enviar resultados do primeiro comando para o outro. Eu gostaria de matar todos os processos que correspondem a um nome.
Isto é o que o pgrep normalmente faz:

$ pgrep name
5089
5105

E vários argumentos parecem funcionar com kill :

sudo kill 5089 5105

Mas isso está errado:

pgrep name | kill

Então, como fazer isso corretamente?

    
por Tomáš Zato 20.06.2014 / 07:57

3 respostas

31

Tente isto:

pgrep name | xargs kill

Se você usar pgrep name | kill , a saída de pgrep name será alimentada para stdin de kill . Porque kill não lê argumentos de stdin, então isso não funcionará.

Usando xargs , ele criará argumentos para kill de stdin. Exemplo:

$ pgrep bash | xargs echo
5514 22298 23079
    
por 20.06.2014 / 08:04
15

Isso deve funcionar:

pkill name

Eu também sugiro ler a página do manual.

    
por 20.06.2014 / 08:00
4

Para responder ao geral e não ao específico ...

Pipes são para passar a saída de um programa como entrada para outro programa.

Parece que você está tentando usar a saída de um programa como argumentos da linha de comando para outro programa, que é diferente.

Para isso, use a substituição de comandos .

Por exemplo, se você quiser executar

sudo kill 5089 5105

E você tem um comando pgrep name que gera 5089 5105

Você os coloca juntos como

sudo kill $(pgrep name)
    
por 20.06.2014 / 08:44