Articulo de referencia

Proceso huérfano

Un proceso huérfano es un proceso informático cuyo proceso padre ha finalizado o finalizado , aunque continúa ejecutándose. Similar a Unix En un sistema operativo tipo Unix, cua...

Un proceso huérfano es un proceso informático cuyo proceso padre ha finalizado o finalizado , aunque continúa ejecutándose.

Similar a Unix

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

Un proceso puede quedar huérfano de forma no intencionada, como cuando el proceso padre finaliza o se bloquea. El mecanismo de grupos de procesos de la mayoría de los sistemas operativos tipo Unix se puede utilizar para ayudar a protegerse 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 dejar que sigan ejecutándose como huérfanos. Más precisamente, como parte del control de trabajos , cuando el shell sale, debido a que es el "líder de la 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 los grupos de procesos).

A veces es deseable dejar huérfano intencionalmente un proceso, generalmente para permitir que un trabajo de larga duración se complete sin más atención del usuario, o para iniciar un servicio o agente que se ejecuta indefinidamente; dichos procesos (sin una sesión asociada) se conocen como daemons , particularmente si se ejecutan indefinidamente. Un enfoque de bajo nivel es bifurcar dos veces, ejecutando el proceso deseado en el nieto y terminando inmediatamente el hijo. El proceso nieto ahora está huérfano y no es adoptado por su abuelo, sino por init. Las alternativas de nivel superior evitan el manejo de bloqueos 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 final de la sesión (usando disown en cualquier caso). En cualquier caso, el ID de sesión (ID de proceso del líder de la sesión, el shell) no cambia, y el ID de proceso de la sesión que ha finalizado sigue en uso hasta que todos los procesos huérfanos finalicen o cambien el ID de sesión (iniciando una nueva sesión a través de setsid(2)).

Para simplificar la administración del sistema, a menudo es conveniente utilizar un contenedor de servicios para que los procesos que no están diseñados para ser utilizados 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 se vuelve separada), 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 se bloquea inesperadamente después de realizar la solicitud mientras deja el proceso de servidor en ejecución.

Estos procesos huérfanos desperdician recursos del servidor y pueden dejarlo sin recursos. Sin embargo, existen varias soluciones para el problema de los procesos huérfanos:

  1. La terminación es la técnica más comúnmente utilizada; en este caso se mata al huérfano.
  2. La reencarnación es una técnica en la que las máquinas intentan periódicamente localizar a los padres de cualquier cálculo remoto; en cuyo punto se eliminan los procesos huérfanos.
  3. La expiración es una técnica en la que se asigna a cada proceso 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.

Véase también

Referencias

  1. ^ "¿Qué es un proceso "subreaper"?".
  2. ^ "Nuevo proceso padre cuando el proceso padre muere". A partir de Linux 3.4, los procesos pueden ejecutar 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 proceso padre de cualquiera de sus procesos descendientes huérfanos.
  • "10.6.4 Grupos de procesos huérfanos", El modelo de procesos del desarrollo de aplicaciones Linux , por Erik W. Troan y Michael K. Johnson, 8 de julio de 2005
Obtenido de "https://es.wikipedia.org/w/index.php?title=Proceso_huérfano&oldid=1237691334"