stringtranslate.com

Proceso infantil

Un proceso hijo en informática es un proceso creado por otro proceso (el proceso padre ). Esta técnica pertenece a los 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 llamada spawn (preferida en el núcleo moderno (NT) de Microsoft Windows , así como en algunos sistemas operativos históricos).

Historia

Los procesos secundarios datan de finales de los años 1960, con una forma temprana en revisiones posteriores de la forma Multiprogramming with a Fixed Number of Tasks Version 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 se crea normalmente como una copia del padre, mediante la llamada al sistema fork . El proceso hijo puede entonces superponerse a sí mismo con un programa diferente (mediante exec ) según sea necesario. [1]

Cada proceso puede crear muchos procesos secundarios pero tendrá como máximo un proceso primario; si un proceso no tiene un proceso primario 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 ) es iniciado por el núcleo en el momento del arranque y nunca termina (ver Proceso de inicio de Linux ); otros procesos sin padre pueden ser lanzados para llevar a cabo varias tareas de demonio en el espacio de usuario . Otra forma de que un proceso termine sin un proceso primario es si su proceso primario muere, dejando un proceso huérfano ; pero en este caso, pronto será adoptado por init .

La señal SIGCHLD se envía al padre de un proceso hijo cuando éste sale , se interrumpe o se reanuda después de haber sido interrumpido. De manera predeterminada, la señal simplemente se ignora. [2]

Niños creados por spawn

Fin de la vida

Cuando un proceso hijo finaliza, se devuelve cierta información al proceso padre.

Cuando un proceso secundario finaliza antes de que el primario haya llamado a wait , el núcleo conserva cierta información sobre el proceso, como su estado de salida , para permitir que su primario llame a wait más tarde. [3] Debido a que el secundario todavía está consumiendo recursos del sistema pero no se está ejecutando, se lo conoce como un proceso zombi . La llamada al sistema wait se invoca comúnmente en el controlador SIGCHLD.

POSIX.1-2001 permite que un proceso padre elija que el núcleo recoja 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 recolección automática solo ocurre si la disposición se establece en ignorar explícitamente [4] ), o estableciendo el indicador SA_NOCLDWAIT para la señal SIGCHLD. Los núcleos de Linux 2.6 se adhieren a este comportamiento, y FreeBSD admite ambos métodos desde la versión 5.0. [5] Sin embargo, debido a las diferencias históricas entre los comportamientos de System V y BSD con respecto a ignorar SIGCHLD, llamar a wait sigue siendo el paradigma más portátil para limpiar después de que se bifurquen los procesos secundarios. [6]

Véase también

Referencias

  1. ^ Este artículo se basa en material tomado de Child+process en el Diccionario gratuito en línea de informática antes del 1 de noviembre de 2008 e incorporado bajo los términos de "renovación de la licencia" del GFDL , versión 1.3 o posterior.
  2. ^ signal.h  – Referencia de definiciones básicas, La especificación única de UNIX , versión 4 de The Open Group
  3. ^ wait(2) : esperar a que el proceso cambie de estado –  Manual del programador de Linux – Llamadas del sistema
  4. ^ "El núcleo Linux: señales". Win.tue.nl. Consultado el 30 de abril de 2014 .
  5. ^ [1] Archivado el 29 de septiembre de 2011 en Wayback Machine .
  6. ^ sigaction(2) : examinar y cambiar una acción de señal –  Manual del programador de Linux – Llamadas del sistema

Enlaces externos