Atualmente eu uso uma linha como esta no meu arquivo de script sh:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
Mas gostaria de saber como chamá-lo apenas se o processo ( myServer
aqui) estiver em execução?
bash
command-line
kill
myWallJSON
fonte
fonte
kill
somente quando o processo está em execução, porque existe uma condição de corrida entre o teste e a invocação dekill
(é possível que o processo tenha sido interrompido por outro motivo nesse curto espaço de tempo). Você deve usarpkill
oukillall
fazer exatamente o mesmo que você tenta fazer, mas com menos para digitar (e provavelmente algumas outras vantagens também).Respostas:
Eu costumo usar pgrep e pkill
fonte
pkill myServer
oukillall -q myServer
? Não há desvantagem em tentar matar processos inexistentes.|| true
então.if ! killall -q myServer; then echo ERROR; fi
?Você pode matar processos pelo nome usando
pkill
oukillall
, verifique suas páginas de manual.fonte
kill
, isso mata apenas se o processo estiver em execução. Por exemplopkill -u myuser -f myprocess\.[0-9]+
Uma abordagem um pouco diferente seria algo como isto:
Isso evitará o
1
código de erro retornado dokillall
comando, se o processo não existir. Aecho
peça só entrará em ação sekillall
retornar1
, enquanto ela retornará0
(sucesso).fonte
killall -q
é melhorkillall -q
não é suportado em todos os tipos de unix, o macOS Catalina ainda não o possui.tente usar:
onde process_name é o nome do processo que você deseja matar. O que é ótimo nisso é que o pidof listará os pids de todos os processos correspondentes ao nome fornecido. Como o kill aceita vários pid's, ele mata todos eles com um único capricho.
Avise-me se isso ajudar.
fonte
kill `pidof process_name
. Se retornar uma lista vazia, pule a chamada final.Script pequeno que eu criei com P&D. Eu espero que você goste
salve-o com um nome como script.sh e
Em seguida, dê o nome do seu processo.
Nota: Eu tentei muitas vezes com isso e está tudo bem.
fonte
Verifique se o processo existe com
pidof
. Se isso acontecer, mate-o:O código de saída é sempre 0 depois de executar o comando acima.
fonte
Use
pkill
com a opção-f
Option
-f
é o padrão que normalmente corresponde ao nome do processo.fonte
Eu usaria:
O
xargs -r
comando diz para executar kill apenas se houver entrada. Ops --no-header -eo pid,cmd
obtém a saída em um formato melhor para análise.fonte