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

22

Além do mais violento kill -9 (SIGKILL), eu não entendo muito bem a diferença entre os 3 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 ao processo para finalizar graciosamente , sem salvar . Avaliando a dureza, colocaria -HUP < -TERM < -INT < -KILL .

    
por Kenny 23.12.2015 / 19:37

1 resposta

36

O SIGKILL nunca falha para matar um processo em execução, essa é a questão. Outros sinais existem para dar ao aplicativo uma chance de reagir.

O comportamento padrão de SIGINT, SIGTERM, SIGQUIT e SIGHUP é matar o programa. No entanto, as aplicações podem instalar um manipulador para esses sinais. Assim, o comportamento real dos aplicativos quando eles recebem esses sinais é uma questão de convenção (que cada aplicativo pode ou não seguir), não de design de sistema.

SIGINT é o “mais fraco” do lote. Seu significado convencional é “pare o que você está fazendo agora e espere por mais entrada do usuário”. É o sinal gerado por Ctrl + C em um terminal. Programas não interativos geralmente tratam como SIGTERM.

SIGTERM é o sinal de morte "normal". Ele informa ao aplicativo para sair corretamente. O aplicativo pode levar algum 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 algum tempo.

O SIGHUP é quase o mesmo que o SIGTERM em termos de aspereza, mas tem um papel específico porque é enviado automaticamente para aplicativos em execução em um terminal quando o usuário se desconecta desse terminal (etimologicamente, porque o usuário estava se conectando por uma linha telefônica e o modem desligou). O SIGHUP é frequentemente involuntário, ao contrário do SIGTERM, que deve ser enviado explicitamente, portanto, os aplicativos devem tentar salvar seu estado em um SIGHUP. O SIGHUP também tem um significado convencional completamente diferente para aplicativos não voltados ao usuário ( daemons ), que deve ser recarregado seu arquivo de configuração.

SIGQUIT é o mais duro 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 deixou um core dump file (sistemas modernos em que a maioria dos usuários não saberia o que é um arquivo principal tendem 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 deve ser usada quando algo está seriamente errado.

    
por 24.12.2015 / 02:58

Tags