La palabra "subreaper" se usa en algunas respuestas. Al buscar en Google también aparecen entradas en las que la palabra "se acaba de usar".
¿Cómo puedo entender qué es un "subreaper"?
process
linux-kernel
process-management
kenchew
fuente
fuente
Respuestas:
Esto se implementó en el kernel 3.4 de Linux como un indicador de la llamada al sistema prctl () .
Desde la página del
prctl(2)
manual:Un proceso puede definirse a sí mismo como un subreaper con
prctl(PR_SET_CHILD_SUBREAPER)
. Si es así, no esinit
(PID 1) el que se convertirá en el padre de los procesos secundarios huérfanos , en cambio, el abuelo vivo más cercano que está marcado como un subárea se convertirá en el nuevo padre. Si no hay abuelos vivos,init
sí.La razón para poner en práctica este mecanismo es que los administradores de servicios de espacio de usuario / supervisores (como
upstart
,systemd
necesidad) para realizar un seguimiento de sus servicios iniciados. Muchos servicios se demonizan mediante doble bifurcación y se vuelven a emparejar implícitamente con PID 1. El administrador del servicio ya no podrá recibir lasSIGCHLD
señales y ya no se encargará de cosechar a los niñoswait()
. Toda la información sobre los niños se pierde en el momento en que PID 1 limpia los procesos parentalizados. Ahora, un proceso de administrador de servicios puede marcarse a sí mismo como una especie de "subiniciado" y ahora puede permanecer como padre para todos los procesos huérfanos creados por los servicios iniciados. Todas lasSIGCHLD
señales serán entregadas al gerente de servicio.En Linux, un demonio generalmente se crea bifurcando dos veces con el proceso intermedio que sale después de bifurcar al nieto. Esta es una técnica común para evitar procesos zombies . El guión de inicio llama a un niño. Ese niño se bifurca nuevamente y, por lo tanto, sale inmediatamente. El nieto será adoptado por
init
, que llama continuamentewait()
para recopilar el estado de salida de sus hijos para evitar zombis. Con el concepto de subreápers, el administrador del servicio del espacio de usuario ahora se convierte en el nuevo padre, en lugar de hacerloinit
.fuente