Diferença entre o sinal de morte menos violento -HUP (1) -INT (2) e -TERM (15)

32

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.

Kenny
fonte
HUPnão significa necessariamente que o programa será encerrado. Alguns programas usam SIGHUPpara recarregar arquivos de configuração. SIGKILLfalha, ou é adiado, quando o processo está em suspensão ininterrupta .
Muru

Respostas:

52

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.

Gilles 'SO- parar de ser mau'
fonte
Você pode elaborar mais sobre "salvar o estado deles"? Se estou em um editor de texto e o mato, suponho que o conteúdo não seja salvo.
Kenny
2
@Kenny A maioria dos editores não salva o arquivo, porque você pode ter feito modificações temporárias que não pretendia salvar. Editores avançados (por exemplo, vi, emacs) têm um arquivo de salvamento automático, onde salvam dados de tempos em tempos; no SIGHUP, eles normalmente garantem que o arquivo de salvamento automático esteja atualizado.
Gilles 'SO- stop be evil'