Un proceso hijo en informática es un proceso creado por otro proceso (el proceso padre ). Esta técnica pertenece a sistemas operativos multitarea y, a veces, se denomina subproceso o, tradicionalmente, subtarea .
Hay dos procedimientos principales para crear un proceso hijo: la llamada al sistema fork (preferida en sistemas similares a Unix y el estándar POSIX ) y el spawn (preferido en el kernel moderno (NT) de Microsoft Windows , así como en algunos sistemas operativos históricos sistemas).
Historia
Los procesos secundarios datan de finales de la década de 1960, con una forma temprana en revisiones posteriores de la forma de Multiprogramación con un número fijo de tareas Versión II (MFT-II) del sistema operativo IBM OS / 360 , que introdujo subtareas (ver tarea ) . La forma actual en Unix se basa en Multics (1969), mientras que la forma de Windows NT se basa en VAX / VMS , de RSX-11 (1972).
Niños creados por tenedor
Un proceso hijo hereda la mayoría de sus atributos , como los descriptores de archivo , de su padre. En Unix , un proceso hijo generalmente se crea como una copia del padre, utilizando la llamada al sistema fork . El proceso hijo puede luego superponerse a sí mismo con un programa diferente (usando exec ) según sea necesario.
Cada proceso puede crear muchos procesos secundarios, pero tendrá como máximo un proceso principal; si un proceso no tiene un padre, esto generalmente indica que fue creado directamente por el kernel . En algunos sistemas, incluidos los basados en Linux , el núcleo inicia el primer proceso (llamado init ) en el momento del arranque y nunca termina (consulte el proceso de inicio de Linux ); se pueden iniciar otros procesos sin padres para llevar a cabo varias tareas de demonio en el espacio de usuario . Otra forma de que un proceso termine sin un padre es si su padre muere, dejando un proceso huérfano ; pero en este caso, init lo adoptará en breve .
La señal SIGCHLD se envía al padre de un proceso hijo cuando sale , se interrumpe o se reanuda después de haber sido interrumpido. Por defecto, la señal simplemente se ignora. [1]
Niños creados por spawn
Fin de la vida
Cuando termina un proceso hijo, se devuelve cierta información al proceso padre.
Cuando un proceso hijo termina antes de que el padre haya llamado a esperar , el kernel retiene cierta información sobre el proceso, como su estado de salida , para permitir que su padre llame a esperar más tarde. [2] Debido a que el niño todavía consume recursos del sistema pero no los ejecuta, se conoce como proceso zombie . La llamada al sistema de espera se invoca comúnmente en el controlador SIGCHLD.
POSIX.1-2001 permite que un proceso padre elija que el kernel recolecte automáticamente los procesos secundarios que terminan estableciendo explícitamente la disposición de SIGCHLD en SIG_IGN (aunque ignorar es el valor predeterminado, la cosecha automática solo ocurre si la disposición está configurada para ignorar explícitamente [ 3] ), o estableciendo la bandera SA_NOCLDWAIT para la señal SIGCHLD. Los kernels de Linux 2.6 se adhieren a este comportamiento y FreeBSD admite ambos métodos desde la versión 5.0. [4] Sin embargo, debido a las diferencias históricas entre los comportamientos de System V y BSD con respecto a ignorar SIGCHLD, llamar a esperar sigue siendo el paradigma más portátil para limpiar después de procesos secundarios bifurcados. [5]
Ver también
Notas
Este artículo se basa en material extraído del Diccionario gratuito de informática en línea antes del 1 de noviembre de 2008 e incorporado bajo los términos de "renovación de licencias" de la GFDL , versión 1.3 o posterior.
Referencias
- ^ - Referencia de definiciones de base, la especificación única de UNIX , número 7 de The Open Group
- ^ : espere a que el proceso cambie de estado - Manual del programador de Linux - Llamadas al sistema
- ^ "El kernel de Linux: señales" . Win.tue.nl . Consultado el 30 de abril de 2014 .
- ^ [1] Archivado el 29 de septiembre de 2011 en la Wayback Machine.
- ^ : examinar y cambiar una acción de señal - Manual del programador de Linux - Llamadas al sistema
enlaces externos
- : imprimir árboles de proceso - Manual de comandos de usuario de Linux