O que acontece com um daemon sem um link “K” em /etc/rcX.d/

4

O que acontece com os processos iniciados pelo init por meio de um script de inicialização, se esse script não tiver uma entrada K correspondente em (por exemplo) /etc/rc0.d/ ?

Por exemplo, o script a seguir iniciou um processo de daemonização:

-rwxrwxr-x. 1 root root 3.3K Jul 16 11:48 /etc/rc3.d/S99foobar

Não há link correspondente (por exemplo, /etc/rc0.d/K99foobar ) para lidar com a finalização desses processos no momento do desligamento / reinicialização.

Esses processos recebem apenas um SIGTERM, seguido por um SIGKILL, do init, quando são as últimas coisas em execução? Ou o init é inteligente o suficiente para chamar /etc/init.d/foobar stop ?

    
por fukawi2 18.11.2014 / 04:02

2 respostas

5

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.

    
por 18.11.2014 / 04:15
1

No final, depois de derrubar tudo que pode ser derrubado, tudo o que resta recebe um "kill -9".

    
por 18.11.2014 / 04:27

Tags