Retirado deste: http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html#ss4.4
From here, the child process must get a unique SID from the kernel in order to operate. Otherwise, the child process becomes an orphan in the system.
Qual é o problema se o processo filho se tornar órfão? Por que ele precisa de seu próprio sid?
Respostas:
* Os processos Nix são identificados por um PID (ID do processo), um PPID (PID dos pais), um GID (ID do grupo) e um SID (ID da sessão). Você pode vê-los com o comando
(isso inclui o
command
campo, ou seja , o comando que deu origem ao processo).PID e PPID são fáceis de entender; o GID é usado para permitir que uma interrupção alcance todos os processos pertencentes ao mesmo grupo: suponha que você esteja fazendo
e você deseja
suspend
este comando ( Ctrl+ Z), precisará suspender todos eles; para permitir isso, eles pertencem ao mesmo GID e a interrupção é entregue a todos os processos com o mesmo GID.O SID (ID da sessão) é o PID do processo que cria uma sessão. Todos os processos criados posteriormente na mesma sessão herdam esse SID, embora possam ter IDs de grupo e PPIDs distintos, e certamente possuem PIDs distintos.
Quando a sessão em questão termina (por exemplo, através de um logout), o kernel mata todos os processos com o mesmo SID, pertencentes à sessão em questão. Isso é feito por razões óbvias: os processos restantes estariam aguardando entrada que não pode mais chegar, ou estariam entregando mensagens de saída ou erro que ninguém examinará.
Para que um serviço (minha resposta anterior não levasse em conta que você está discutindo exatamente um serviço, desculpe-me por minha distraída) sobreviver ao logout da sessão que o iniciou, ele não pode ser deixado com o SID do original sessão, para que não seja destruído pelo kernel no logout. Daí a necessidade de um novo SID. Se você não atribuir um novo SID, ele herdará o da sessão que o executa e será eliminado sempre que a sessão for fechada, o que provavelmente é muito menor do que o tempo em que você deseja que um serviço dure.
Há outra reviravolta padrão (mas ainda assim fofa) na página que você mencionou acima: a
fork
. Isso também faz parte da estratégia para o daemon sobreviver ao desaparecimento de seu ambiente de origem. Você provavelmente notou que o daemon primeiro extrai do processo pai e, em seguida, fecha imediatamente o processo pai antes de começar a trabalhar. Por quê? Porque, quando um terminal é fechado, ele envia um sinal SIGHUP para seu processo de controle, o shell. Isto faz com que todo o processo geralmente ligado a esta concha de morrer, como a concha vai retransmitir o SIGHUP recebeu a toda a sua jobs.But o escudo não manter o controle dos seus netos , portanto, o daemon sobrevive ao fechamento do terminal a partir do qual se origina .Desconectar o daemon da sessão e do terminal é essencial para sua sobrevivência, uma vez que um deles desaparece.
fonte