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.
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?
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'
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.
Tão simples quanto:
$ kill -9 $(pgrep -f vmstat)