/ / Mate e reinicie vários processos que se enquadram em um determinado padrão - unix, shell, script, kill

Mate e reinicie vários processos que se ajustam a um determinado padrão - unix, shell, scripting, kill

Estou tentando escrever um script de shell que eliminará todos os processos em execução que correspondem a um determinado padrão e, em seguida, reinicie-os. Posso exibir os processos com:

ps -ef|grep ws_sched_600.sh|grep -v grep|sort -k 10

O que fornece uma lista dos processos relevantes:

user 2220258       1   0 16:53:12      -  0:01 /bin/ksh /../../../../../ws_sched_600.sh EDW02_env
user 5562418       1   0 16:54:55      -  0:01 /bin/ksh /../../../../../ws_sched_600.sh EDW03_env
user 2916598       1   0 16:55:00      -  0:01 /bin/ksh /../../../../../ws_sched_600.sh EDW04_env

Mas não estou muito certo sobre como passar os ids do processo para matar?

Respostas:

6 para resposta № 1

o sort não parece necessário. Você pode usar awk para imprimir a segunda coluna e xargs para converter a saída em argumentos de linha de comando para kill.

ps -ef | grep ws_sched_600.sh | awk "{print $2}" | xargs kill

Alternativamente, você poderia usar pkill ou killall que mata com base no nome do processo:

pkill -f ws_sched_600.sh

1 para resposta № 2
pkill ws_sched_600.sh

Se você está preocupado em executar seu comando em múltiplas plataformas onde pkill pode não estar disponível

ps -ef | awk "/ws_sched_600/{cmd="kill -9 "$2;system(cmd)}

0 para resposta № 3

Eu acho que isto é o que você está procurando

for proc in $(ps -ef|grep ws_sched_600.sh|sort -k 10)
do
kill -9 proc
done

editar:

Claro ... use xargs, é melhor.