Articulo de referencia

Proceso infantil

En informática, un proceso hijo (CP) es un proceso creado por otro proceso (el proceso padre ). Esta técnica se utiliza en sistemas operativos multitarea y a veces se denomina s...

En informática, un proceso hijo (CP) es un proceso creado por otro proceso (el proceso padre ). Esta técnica se utiliza en sistemas operativos multitarea y a veces se denomina subproceso o, tradicionalmente, subtarea .

Existen dos procedimientos principales para crear un proceso hijo: la llamada al sistema fork (preferida en sistemas tipo Unix y en el estándar POSIX ) y 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 la década de 1960, con una forma temprana en revisiones posteriores de la versión II de Multiprogramming with a Fixed number of Tasks (MFT-II) del sistema operativo IBM OS/360 , que introdujo la subtarea (véase 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 archivo , de su proceso padre. En Unix , un proceso hijo se crea normalmente como una copia del padre, utilizando la llamada al sistema fork . El proceso hijo puede entonces superponerse con un programa diferente (utilizando exec ) según sea necesario. [ 1 ]

Cada proceso puede crear muchos procesos hijos, pero tendrá como máximo un proceso padre; si un proceso no tiene padre, esto generalmente indica que fue creado directamente por el kernel . En algunos sistemas, incluidos los sistemas basados ​​en Linux , el primer proceso (llamado init ) es iniciado por el kernel al arrancar y nunca termina (ver Proceso de inicio de Linux ); otros procesos sin padre pueden iniciarse para realizar diversas tareas de demonio en el espacio de usuario . Otra forma en que un proceso puede terminar sin padre es si su padre muere, dejando un proceso huérfano ; pero en este caso será adoptado rápidamente por init .

La señal SIGCHLD se envía al proceso padre de un proceso hijo cuando este finaliza , se interrumpe o se reanuda después de una interrupción. Por defecto, la señal simplemente se ignora. [ 2 ]

Niños creados por progenie

Fin de vida

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

Cuando un proceso hijo termina antes de que el padre llame a wait , el kernel conserva cierta información sobre el proceso, como su estado de salida , para permitir que su padre llame a wait más tarde. [ 3 ] Debido a que el hijo sigue consumiendo recursos del sistema pero no se está ejecutando, se le conoce como un proceso zombie . La llamada al sistema wait se invoca comúnmente en el manejador SIGCHLD.

POSIX.1-2001 permite que un proceso padre elija que el kernel recoja automáticamente los procesos hijos 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 explícitamente en ignorar [ 4 ] ), 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. [ 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 portable para limpiar después de los procesos hijos bifurcados. [ 6 ]

Véase también

  • salida
  • pstree , para que UNIX encuentre el proceso hijo ( pstree PID , donde PID es el ID del proceso).

Referencias

  1. Este artículo se basa en material tomado de Child+process en el Free On-line Dictionary of Computing antes del 1 de noviembre de 2008 e incorporado bajo los términos de "relicencia" de la GFDL , versión 1.3 o posterior.
  2. Referencia de definiciones básicas, Especificación única de UNIX , Versión 5 de The Open Groupsignal.h  
  3. : esperar a que el proceso cambie de estado Manual del programador de Linux – Llamadas al sistema de Manned.orgwait(2)   
  4. "El núcleo de Linux: Señales" . Win.tue.nl. Consultado el 30 de abril de 2014 .
  5. Archivado el 29 de septiembre de 2011 en Wayback Machine .
  6. : examinar y cambiar una acción de señal Manual del programador de Linux – Llamadas al sistema de Manned.orgsigaction(2)   
  • pstree(1): imprimir árboles de procesos Manual de comandos de usuario de Linux