Estou recebendo muitas mensagens contraditórias das pessoas e queria saber se realmente não há muita diferença no que você usa.
kill 'x'
killall 'x'
kill -9 'x'
Estas são algumas opções que me disseram para usar até agora, mas algumas pessoas dizem que matar -9 é apenas um exagero, matar por si só não funciona, etc.
Alguém tem algum conselho sobre qual deles deve ser usado no caso mais padrão de apenas encerrar um processo (e, portanto, seu estado também)?
[edit] Estou procurando o que usar quando você deseja interromper a execução do seu processo para poder executar um novo, novo desde o início
SIGKILL
.kill -l
e traduzir um número para o nome do sinal correspondente, por exemplokill -l 9
, retornaráKILL
.Respostas:
Existem vários sinais cuja disposição padrão é finalizar o processo. O sinal final de terminação é SIGKILL, pois não pode ser tratado e o processo não tem escolha a não ser morrer. No entanto, isso também significa que, se você o enviar, o processo será privado de uma oportunidade de limpeza. Portanto, boas maneiras exigem o envio de um sinal como o SIGTERM, que pode ser tratado primeiro e somente se o processo não terminar após algum tempo, enviá-lo à SIGKILL.
Observe que SIGINT e SIGQUIT não são bons candidatos para o encerramento arbitrário do processo. Devido ao fato de poderem ser gerados a partir do teclado do terminal, muitos aplicativos os utilizam para fins especiais. Por exemplo, o interpretador python usa SIGINT para gerar
KeyboardInterrupt
exceção (também em sessões interativas em python, onde ele simplesmente retorna ao prompt) e a JVM usa SIGQUIT para despejar rastreamentos de pilha. SIGINT e SIGQUIT permanecem eficazes para a maioria dos utilitários de linha de comando padrão, comofind
oucat
.Durante o desligamento do sistema, a maioria dos sistemas UNIX e Linux envia o SIGTERM para todo o processo, seguido de 5 segundos de espera, seguido pelo SIGKILL. Esta é a maneira recomendada de encerrar com segurança um processo arbitrário.
Observe também que mesmo o SIGKILL pode não finalizar um processo preso em uma espera ininterrupta até que o processo seja ativado.
fonte
kill -SIGTERM $pid; sleep 5; kill -SIGKILL $pid;
recomendação?SIGHUP
vem do dia em que as linhas dial-up eram comuns. Esse sinal foi enviado para indicar que a linha foi desligada. Mais tarde, quando isso era menos comum,SIGHUP
às vezes era usado pelos daemons para reler o arquivo de configuração sem reiniciar o processo. Nestes tempos modernos,SIGHUP
raramente é usado. Muitos daemons terá sua própria maneira de reinicializar (ou seja,apachectl graceful
ourndc reconfig
por coisas que você não deve usar.[init.d|smf|upstart|launchd]
Controles sempre que possível.Você deve começar com o mais gentil e escalar a partir daí. Isso significa: SIGINT, SIGTERM, SIGQUIT, SIGKILL. Embora a maioria das pessoas pule SIGINT e SIGQUIT.
fonte