Além do mais violento kill -9
(SIGKILL), não entendo bem a diferença entre os três outros sinais comuns ( aqui ) -HUP
(1), -INT
(2) e -TERM
(15).
Em quais cenários um funcionaria e o outro não?
Em geral, quando -9
( -KILL
) falha?
Para mim, eles parecem pedir que o processo termine normalmente , sem salvar . Classificando a dureza, eu diria -HUP < -TERM < -INT < -KILL
.
HUP
não significa necessariamente que o programa será encerrado. Alguns programas usamSIGHUP
para recarregar arquivos de configuração.SIGKILL
falha, ou é adiado, quando o processo está em suspensão ininterrupta .Respostas:
SIGKILL nunca falha em matar um processo em execução, esse é o ponto. Existem outros sinais para dar ao aplicativo a chance de reagir.
O comportamento padrão de SIGINT, SIGTERM, SIGQUIT e SIGHUP é matar o programa. No entanto, os aplicativos têm permissão para instalar um manipulador para esses sinais. Portanto, o comportamento real dos aplicativos quando recebem esses sinais é uma questão de convenção (que cada aplicativo pode ou não seguir), não do design do sistema.
SIGINT é o "mais fraco" do lote. Seu significado convencional é "interrompa o que você está fazendo agora e aguarde mais informações do usuário". É o sinal gerado por Ctrl+ Cem um terminal. Programas não interativos geralmente o tratam como SIGTERM.
SIGTERM é o sinal de morte "normal". Diz ao aplicativo para sair corretamente. O aplicativo pode levar tempo para salvar seu estado, liberar recursos, como arquivos temporários que, de outra forma, ficariam para trás etc. Um aplicativo que não deseja ser interrompido durante um aplicativo crítico pode ignorar o SIGTERM por um tempo.
SIGHUP é o mesmo que SIGTERM em termos de aspereza, mas tem uma função específica porque é automaticamente enviado para aplicativos em execução em um terminal quando o usuário se desconecta desse terminal (etimologicamente, porque o usuário estava se conectando através de uma linha telefônica e do modem desligar). O SIGHUP geralmente é involuntário, diferente do SIGTERM, que deve ser enviado explicitamente, portanto, os aplicativos devem tentar salvar seu estado em um SIGHUP. O SIGHUP também possui um significado convencional completamente diferente para aplicativos não voltados para o usuário ( daemons ), que é recarregar seu arquivo de configuração.
SIGQUIT é o mais severo dos sinais ignoráveis. Ele deve ser usado quando um aplicativo está se comportando mal e precisa ser eliminado agora e, por padrão, tradicionalmente deixa um arquivo de despejo central (sistemas modernos em que a maioria dos usuários não sabe o que é um arquivo principal tende a não produzi-los por padrão) . Os aplicativos podem definir um manipulador, mas devem fazer muito pouco (em particular, não salvar nenhum estado), porque a intenção do SIGQUIT é ser usada quando algo estiver seriamente errado.
fonte