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 № 1o 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.