stringtranslate.com

proceso hijo

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 tipo Unix y el estándar POSIX ) y la generación (preferida en el kernel moderno (NT) de Microsoft Windows , así como en algunos procesos 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 Multiprogramación con un número fijo de tareas Versión II (MFT-II) del sistema operativo IBM OS/360 , que introdujo la subtarea (ver tarea ). . La forma actual en Unix se basa en Multics (1969), mientras que la forma de Windows NT se basa en OpenVMS (1978), de RSX-11 (1972).

Niños creados por tenedor

Un proceso hijo hereda la mayoría de sus atributos , como los descriptores de archivos , de su padre. En Unix , un proceso hijo normalmente se crea como una copia del padre, utilizando la llamada al sistema fork . Luego, el proceso hijo puede 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 núcleo . En algunos sistemas, incluidos los sistemas basados ​​en Linux , el primer proceso (llamado init ) lo inicia el kernel en el momento del arranque y nunca finaliza (consulte el proceso de inicio de Linux ); Se pueden iniciar otros procesos sin padres para llevar a cabo diversas 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 será adoptado en breve por init .

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 finaliza un proceso hijo, parte de la información se devuelve al proceso padre.

Cuando un proceso hijo termina antes de que el padre haya llamado a esperar , el núcleo 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 principal elija que el núcleo coseche automáticamente los procesos secundarios que finalizan estableciendo explícitamente la disposición de SIGCHLD en SIG_IGN (aunque ignorar es el valor predeterminado, la recolección automática solo ocurre si la disposición está configurada para ignorar explícitamente [ 3] ), o configurando el indicador SA_NOCLDWAIT para la señal SIGCHLD. Los kernels de Linux 2.6 siguen 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, la espera de llamada sigue siendo el paradigma más portátil para limpiar después de procesos secundarios bifurcados. [5]

Ver también

Referencias

  1. ^ signal.h  - Referencia de definiciones básicas, la especificación única de UNIX , versión 4 de The Open Group
  2. ^ wait(2) : espere a que el proceso cambie de estado -  Manual del programador de Linux - Llamadas al sistema
  3. ^ "El kernel de Linux: señales". Win.tue.nl. _ Consultado el 30 de abril de 2014 .
  4. ^ [1] Archivado el 29 de septiembre de 2011 en Wayback Machine .
  5. ^ sigaction(2) : examinar y cambiar una acción de señal -  Manual del programador de Linux - Llamadas al sistema

enlaces externos