Por que os daemons armazenam seu PID (id de processo) em um arquivo?

4

Dentro do diretório /run dos meus sistemas, eu tenho um monte de arquivos que possuem *.pid extensões e armazenam o id do processo de daemons em execução, ou seja,

% ls -1 /run/*.pid                    
acpid.pid
crond.pid
dhclient-wlp2s0.pid
irqbalance.pid
lightdm.pid
nginx.pid
rsyslogd.pid

E eu geralmente percebi que isso é algo que muitos outros daemons fazem e que os scripts de gerenciamento de daemon em /etc/init.d/* lerão o pid da última instância em execução e o reutilizarão ao iniciar uma nova instância.
Por quê? por que não apenas iniciar o daemon e dar um novo pid?
Existem outros programas, por ex. rsyslog, que espera que o daemon tenha esse identificador e ficaria confuso se um programa diferente estivesse usando esse pid?

    
por the_velour_fog 17.05.2017 / 04:16

1 resposta

9

Para muitos daemons, apenas uma instância do daemon deve estar sendo executada em um sistema a qualquer momento. Nesse caso de uso, o daemon geralmente armazena seu PID em um diretório conhecido (no Linux, atualmente /run , anteriormente /var/run ) para indicar que uma instância do daemon está em execução.

Se você tentar invocar uma segunda instância desse daemon, o daemon recém-chamado verificará se há uma entrada existente (pense nela como um arquivo de bloqueio) em /run e sairá se encontrada.

Se o daemon for reiniciado, o PID da nova instância será gravado no arquivo. A nova instância obtém seu próprio PID, não há como iniciar um processo com um determinado PID.

O arquivo PID também é usado para determinar qual processo matar para parar o daemon.

    
por 17.05.2017 / 05:33