Eu quero matar todos os processos que resultam do seguinte comando

2

O comando a seguir exibirá todos os PIDs em execução para vmstat1 :

ps -ef | grep "vmstat 1" | awk '{ print $2 }'

Minha pergunta é: como eu mato todos eles, se há 20 deles de uma só vez?

    
por I AM L 05.12.2012 / 01:59

4 respostas

4

Se o seu comando produzir uma lista de PIDs, basta enviá-lo para:

xargs kill

Observe que o comando também corresponderá ao comando grep, portanto, considere adicionar algo como |grep -v grep antes do comando grep original.

    
por 05.12.2012 / 02:13
2

Use apenas pkill . Embora não seja um comando padrão, ele é encontrado em muitos Unices e é dedicado a esse tipo de tarefa.

pkill -f 'vmstat 1'

Observe também que grep corresponderá a vmstat 1 , mas também vmstat 10 e grep vmstat 1 (o mesmo aconteceria com pkill acima) e awk será um superconjunto de grep . Para ser mais robusto, você pode fazer isso:

ps -eo pid,args | awk '$2 == "vmstat" && $3 == "1" {print $1}' | xargs kill

Ou

pkill -xf 'vmstat 1'
    
por 05.12.2012 / 08:44
0

Se você já estiver usando o awk, você pode fazer

ps -ef | grep "vmstat 1" | awk '!/grep/{ print "kill " $2 }' | bash

Ele mostrará uma lista de comandos kill, e como cada um dos comandos mata um único processo, você não passará por uma lista de argumentos em potencial por muito tempo (embora seja altamente improvável quando passar por processos em execução) e eu adicionei padrão para evitar corresponder ao próprio processo do grep, já que eliminá-lo pode reduzir sua lista.

    
por 05.12.2012 / 09:54
-1

Tão simples quanto:

$ kill -9 $(pgrep -f vmstat)
    
por 28.04.2016 / 12:45

Tags