O que é um processo de “sub-carregamento”?

34

A palavra "subperíodo" é usada em algumas respostas. Pesquisando no Google também aparecem entradas onde a palavra é "apenas usada".

Como posso entender o que é um "subperteador"?

    
por kenchew 18.12.2015 / 09:21

1 resposta

44

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 a SIGCHLD signal and be able to wait(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() .

    
por 18.12.2015 / 09:48