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?
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?
Respostas:
Eu costumo usar pgrep e pkill
if pgrep myServer; then pkill myServer; fi
pkill myServer
ou killall -q myServer
? Não há desvantagem em tentar matar processos inexistentes.
|| true
então.
if ! killall -q myServer; then echo ERROR; fi
?
Uma abordagem um pouco diferente seria algo como isto:
killall PROCESS || echo "Process was not running."
Isso evitará o 1
código de erro retornado do killall
comando, se o processo não existir. A echo
peça só entrará em ação se killall
retornar 1
, enquanto ela retornará 0
(sucesso).
killall -q
é melhor
killall -q
não é suportado em todos os tipos de unix, o macOS Catalina ainda não o possui.
tente usar:
sudo kill `pidof process_name`
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.
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
#!/bin/bash
echo " Enter the process name:"
read $proc_name
if pgrep $proc_name
then
echo " $proc_name running "
pkill $proc_name
echo "$proc_name got killed"
else
echo " $proc_name is not running/stopped "
fi
salve-o com um nome como script.sh e
chmod +x script.sh
./script.sh
Em seguida, dê o nome do seu processo.
Nota: Eu tentei muitas vezes com isso e está tudo bem.
Verifique se o processo existe com pidof
. Se isso acontecer, mate-o:
(! pidof process_name) || sudo kill -9 $(pidof process_name)
O código de saída é sempre 0 depois de executar o comando acima.
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).