Você pode ter seu bolo ou comê-lo. O programa quer ter o tempo que precisar (ou quiser) para reagir ao SIGTERM. O sistema (gerente de programa) quer poder terminar. Se o sistema esperar para sempre, isso permite que um programa sequestre o desligamento do sistema ao nunca responder (seja porque o programa é mal-intencionado ou porque tem bugs).
Em uma seqüência de desligamento normal, cada daemon é finalizado por meio de um script de inicialização (chame-o de script de desligamento, se desejar) fornecido pelo autor ou pelo empacotador do daemon. Dependendo do daemon, o script de inicialização pode enviar um sinal ou um desligamento mais controlado (por exemplo, gravando em um soquete). O script de inicialização pode esperar que o daemon relate que ele foi desligado satisfatoriamente ou pode ser forçado a matá-lo. Os scripts de inicialização são executados como root (eles podem chamar su
para executar parte de sua tarefa como um usuário menos privilegiado); eles devem cooperar, então eles podem deixar o sistema pendurado para sempre.
Depois que os scripts de inicialização concluírem o trabalho, todos os serviços deverão ser encerrados. Qualquer processo restante deve ser sem importância ou mal-comportado. Então, neste estágio, os processos restantes são ordenados a desligar (SIGTERM), e após um período de carência (dando-lhes uma última chance de desligar) o sistema deve ser desativado para que quaisquer processos restantes sejam mortos à força (SIGKILL). p>
Pense nos scripts de inicialização como o procedimento normal de detenção - mostrar mandados, gritar um aviso etc. Um daemon que cumpra a lei deve ser encerrado neste ponto, embora os daemons tenham advogados (os scripts de init) que podem atrasar o procedimento. por quanto tempo quiserem. Quando o processo normal é concluído, os daemons restantes são considerados hostis. O sistema dispara um tiro de advertência (SIGTERM), depois de um atraso dispara para SIGKILL.