Isso foi implementado no kernel Linux 3.4 como sinalizador da chamada do sistema prctl () .
Na% man_de% manpage:
[...] A subreaper fulfills the role of
init(1)for its descendant processes. Upon termination of a process that is orphaned (i.e., its immediate parent has already terminated) and marked as having a subreaper, the nearest still living ancestor subreaper will receive aSIGCHLDsignal and be able towait(2)on the process to discover its termination status.
Um processo pode se definir como um subinterruptor com prctl(2) . Em caso afirmativo, não é prctl(PR_SET_CHILD_SUBREAPER) (PID 1) que se tornará pai de processos filho órfãos. Avô que está marcado como um subpertório se tornará o novo pai. Se não houver nenhum avô vivo, init faz.
O motivo para implementar esse mecanismo foi que os gerentes / supervisores de serviço do espaço do usuário (como init , upstart precisa monitorar seus serviços iniciados. Muitos serviços daemonizam com double-forking e implicitamente re-parentam para PID 1. O gerente de serviços não poderá mais receber os sinais systemd para eles e não é mais responsável por colher os filhos com SIGCHLD . Todas as informações sobre as crianças são perdidas no momento em que o PID 1 limpa os processos controlados. Agora, um processo de gerenciador de serviços pode se marcar como uma espécie de "sub-init" e agora pode permanecer como pai de todos os processos órfãos criados pelos serviços iniciados. Todos os sinais wait() serão entregues ao gerente de serviços.
No Linux, um daemon é normalmente criado por bifurcação duas vezes com o processo intermediário saindo depois de bifurcar o neto. Essa é uma técnica comum para evitar processos zumbis . O script de inicialização chama uma criança. Aquela criança se bifurca novamente e, assim, sai imediatamente. O neto será adotado por SIGCHLD , que chama continuamente init para coletar o status de saída de seus filhos para evitar zumbis. Com o conceito de subagrupadores, o gerenciador de serviços do espaço do usuário agora se torna o novo pai, em vez de wait() .