Na maioria dos sistemas Unix, os serviços são iniciados e parados pelo sistema init . Muitas distribuições Linux usam o sysvinit legado, que quase não possui funções de gerenciamento de serviços, portanto, os scripts em /etc/init.d
ou /etc/rc.d
executam o trabalho real de iniciar ou eliminar o Apache. Esses initscripts são escritos em simples sh e não têm outro meio de rastrear os processos que eles iniciam - além de ler seu PID de um local pré-definido. (O script só pode saber PIDS de processos lançados diretamente, mas não de filhos de esses processos, nem processos lançados na última vez em que o mesmo script foi chamado. Isso significa que o script não pode rastrear processos que foram programado para "daemonizar" eles mesmos.)
(Sim, um processo pode ser encontrado usando ps -ef
, ou examinando /proc
diretamente. No entanto, este é um método pouco confiável - pode haver vários processos Apache sendo executados ao mesmo tempo: por exemplo, mpm- prefork, ou várias configurações independentes do Apache. Devido a isso, quase todos os daemon no Linux criarão um "pidfile" em /run
ou /var/run
, para que seja facilmente interrompido por um script Você provavelmente terá crond.pid
, ntpd.pid
, rsyslogd.pid
, sshd.pid
e assim por diante.)
Apenas sistemas de inicialização Linux muito recentes incomodam os processos de rastreamento: Upstart no Ubuntu precisa saber exatamente quantos garfos esperar, enquanto systemd no Fedora usa o kernel cgroups para rastrear processos pertencentes a um serviço.