stringtranslate.com

Proceso huérfano

Un proceso huérfano es un proceso informático cuyo proceso principal ha finalizado o finalizado , aunque sigue ejecutándose.

tipo Unix

En un sistema operativo tipo Unix, cualquier proceso huérfano será adoptado inmediatamente por un proceso del sistema definido por la implementación: el núcleo establece el padre de este proceso. Esta operación se llama re-crianza y ocurre automáticamente. Aunque técnicamente el proceso tiene un proceso del sistema como padre, todavía se le llama proceso huérfano ya que el proceso que lo creó originalmente ya no existe. En otros sistemas, el kernel finaliza inmediatamente los procesos huérfanos. Históricamente, la mayoría de los sistemas Unix han utilizado init como el proceso del sistema al que se reparentan los huérfanos, pero en los sistemas DragonFly BSD , FreeBSD y Linux modernos, un proceso huérfano se puede reparentar a un proceso "subreaper" en lugar de init . [1] [2]

Un proceso puede quedar huérfano sin querer, como cuando el proceso principal finaliza o falla. El mecanismo de grupo de procesos en la mayoría de los sistemas operativos tipo Unix se puede utilizar para ayudar a proteger contra huérfanos accidentales, donde en coordinación con el shell del usuario intentará terminar todos los procesos secundarios con la señal de "colgar" ( SIGHUP ), en lugar de permitirles seguir corriendo como huérfanos. Más precisamente, como parte del control de trabajos , cuando el shell sale, debido a que es el "líder de sesión" (su ID de sesión es igual a su ID de proceso), la sesión de inicio de sesión correspondiente finaliza y el Shell envía SIGHUP a todos sus trabajos (representación interna). de grupos de procesos).

A veces es deseable dejar huérfano intencionalmente un proceso, normalmente para permitir que se complete un trabajo de larga duración sin mayor atención del usuario, o para iniciar un servicio o agente que se ejecute indefinidamente; dichos procesos (sin una sesión asociada) se conocen como demonios , particularmente si se ejecutan indefinidamente. Un enfoque de bajo nivel es bifurcar dos veces, ejecutar el proceso deseado en el nieto y finalizarlo inmediatamente. El proceso nieto ahora queda huérfano y no es adoptado por su abuelo, sino por init. Las alternativas de nivel superior evitan el manejo de cuelgues del shell, ya sea diciéndole al proceso hijo que ignore SIGHUP (usando nohup ), o eliminando el trabajo de la tabla de trabajos o diciéndole al shell que no envíe SIGHUP al finalizar la sesión (usando disown en cualquier caso). ). En cualquier caso, la identificación de la sesión (identificación del proceso del líder de la sesión, el shell) no cambia, y la identificación del proceso de la sesión que finalizó todavía está en uso hasta que todos los procesos huérfanos finalicen o cambien la identificación de la sesión (iniciando una nueva sesión vía setsid(2)).

Para simplificar la administración del sistema, a menudo es deseable utilizar un contenedor de servicios para que los procesos no diseñados para usarse como servicios respondan correctamente a las señales del sistema. Una alternativa para mantener los procesos en ejecución sin dejarlos huérfanos es utilizar un multiplexor de terminal y ejecutar los procesos en una sesión separada (o una sesión que queda desconectada), de modo que la sesión no finalice y el proceso no quede huérfano.

También se dice que un proceso de servidor está huérfano cuando el cliente que inició la solicitud falla inesperadamente después de realizar la solicitud mientras deja el proceso del servidor en ejecución.

Estos procesos huérfanos desperdician recursos del servidor y potencialmente pueden dejar un servidor sin recursos. Sin embargo, existen varias soluciones al problema del proceso huérfano:

  1. La terminación es la técnica más utilizada; en este caso el huérfano muere.
  2. La reencarnación es una técnica en la que las máquinas intentan localizar periódicamente a los padres de cualquier cómputo remoto; momento en el que se eliminan los procesos huérfanos.
  3. La caducidad es una técnica en la que a cada proceso se le asigna una cierta cantidad de tiempo para finalizar antes de ser eliminado. Si es necesario, un proceso puede "pedir" más tiempo para finalizar antes de que expire el tiempo asignado.

Ver también

Referencias

  1. ^ "¿Qué es un proceso de" subreaper "?".
  2. ^ "Nuevo proceso principal cuando el proceso principal muere". Desde Linux 3.4 en adelante, los procesos pueden emitir la llamada al sistema prctl() con la opción PR_SET_CHILD_SUBREAPER y, como resultado, ellos, no el proceso n.° 1, se convertirán en el padre de cualquiera de sus procesos descendientes huérfanos.

Definición: Un proceso huérfano es un proceso en ejecución cuyo proceso principal finalizó o finalizó.