GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿un proceso de "subsegador"?

La palabra "subrecolector" se usa en algunas respuestas. La búsqueda en Google también muestra entradas donde la palabra "acaba de usarse".

¿Cómo puedo entender qué es un “subsechador”?

Respuesta aceptada:

Esto se implementó en el kernel de Linux 3.4 como un indicador de la llamada al sistema prctl().

Desde el prctl(2) página de manual:

[…] Un subreaper cumple el rol de init(1) para sus procesos descendientes
. Tras la terminación de un proceso que es huérfano (es decir, su
padre inmediato ya ha terminado) y se marca como que tiene un
subsegador, el subsegador ancestro aún vivo más cercano recibirá un SIGCHLD señal y ser capaz de wait(2) en el proceso para descubrir su
estado de terminación.

Un proceso puede definirse a sí mismo como un subreaper con prctl(PR_SET_CHILD_SUBREAPER) . Si es así, no es init (PID 1) que se convertirá en el padre de los procesos secundarios huérfanos, en su lugar, el abuelo vivo más cercano que esté marcado como subrepper se convertirá en el nuevo padre. Si no hay un abuelo vivo, init lo hace.

La razón para implementar este mecanismo fue que los administradores/supervisores de servicios del espacio de usuario (como upstart , systemd ) necesitan rastrear sus servicios iniciados. Muchos servicios se demonizan mediante doble bifurcación y se vuelven a vincular implícitamente a PID 1. El administrador de servicios ya no podrá recibir el SIGCHLD señales para ellos, y ya no está a cargo de cosechar a los niños con wait() . Toda la información sobre los hijos se pierde en el momento en que el PID 1 limpia los procesos re-parenteados. Ahora, un proceso de administrador de servicios puede marcarse a sí mismo como una especie de "subinicio", y ahora puede permanecer como padre para todos los procesos huérfanos creados por los servicios iniciados. Todo SIGCHLD las señales se enviarán al administrador del servicio.

En Linux, un demonio generalmente se crea bifurcando dos veces con el proceso intermedio saliendo después de bifurcar al nieto. Esta es una técnica común para evitar procesos zombie. El guión de inicio llama a un niño. Ese niño vuelve a bifurcarse y, por lo tanto, sale inmediatamente. El nieto será adoptado por init , que llama continuamente a wait() para recoger el estado de salida de sus hijos para evitar zombies. Con el concepto de subrepers, el administrador de servicios del espacio de usuario ahora se convierte en el nuevo padre, en lugar de init .


Linux
  1. Cómo matar un proceso zombie en Linux

  2. Introducción a los subprocesos de Linux - Parte I

  3. Cómo funciona el ciclo de vida del proceso de Linux:proceso principal, secundario e inicial

  4. Proceso de arranque de Linux

  5. ¿Linux CreateProcess?

Cómo matar un proceso en Linux

Comando Ps en Linux (Lista de Procesos)

Comando Pstree en Linux

Comando matar en Linux

Supervisión de procesos en Linux

Cómo MATAR un proceso en Linux