A palavra "subreaper" é usada em algumas respostas. Pesquisando no Google, também são exibidas entradas onde a palavra é "apenas usada".
Como posso entender o que é um "subreaperador"?
process
linux-kernel
process-management
kenchew
fonte
fonte
Respostas:
Isso foi implementado no kernel do Linux 3.4 como um sinalizador da chamada de sistema prctl () .
Na página de
prctl(2)
manual:Um processo pode se definir como um sub-leitor de
prctl(PR_SET_CHILD_SUBREAPER)
.init
Nesse caso, não é (PID 1) que se tornará o pai de processos filhos órfãos ; em vez disso, o avô vivo mais próximo, marcado como um subárea, se tornará o novo pai. Se não há avô vivo,init
faz.A razão para implementar esse mecanismo era que os gerentes de serviços userspace / supervisores (como
upstart
,systemd
) necessidade de rastrear os seus serviços iniciados. Muitos serviços daemonizam com bifurcação dupla e são implicitamente redirecionados para o PID 1. O gerente de serviço não poderá mais receber osSIGCHLD
sinais para eles e não será mais responsável por colher os filhoswait()
. Todas as informações sobre os filhos são perdidas no momento em que o PID 1 limpa os processos re-parentais. Agora, um processo do 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 osSIGCHLD
sinais serão entregues ao gerente de serviço.No Linux, um daemon é normalmente criado bifurcando duas vezes com o processo intermediário saindo após bifurcar o neto. Essa é uma técnica comum para evitar processos zumbis . O script init chama um filho. Essa criança bifurca-se novamente e, portanto, sai imediatamente. O neto será adotado por
init
, que continuamente pedewait()
para coletar o status de saída de seus filhos para evitar zumbis. Com o conceito de sub-leitores, o gerenciador de serviços do espaço de usuário agora se torna o novo pai, em vez deinit
.fonte