Se você observar o processo de desligamento com cuidado, verá, depois de praticamente tudo ter sido feito, que o init matará tudo que ainda estiver em execução.
Em um sistema Red Hat / CentOS 6, você verá:
Sending all processes the TERM signal...
seguido alguns segundos depois por
Sending all processes the KILL signal...
Qualquer coisa que não tenha sido fechada até lá será morta. Isso está no script /etc/rc.d/init.d/halt
, que é o script final executado no encerramento do sistema.
Depois que isso for executado, halt
começará a desmontar sistemas de arquivos e realizar outra limpeza final pré-desligamento e, finalmente, interromperá ou reinicializará o sistema.
Todas as outras distribuições usando upstart ou SysVinit fazem algo semelhante.
Observe que esse problema não surge com o systemd, porque está sempre ciente de quais serviços ele foi iniciado.