subrutina fork, f_fork o vfork
Finalidad
Crea un proceso nuevo.
Bibliotecas
fork, f_forky vfork: Biblioteca C estándar (libc.a)
Sintaxis
#include <unistd.h> pid_t fork(void) pid_t f_fork(void) int vfork(void)Descripción
La subrutina fork crea un nuevo proceso. El proceso nuevo (proceso hijo) es una copia casi exacta del proceso de llamada (proceso padre). El proceso hijo hereda los atributos siguientes del proceso padre:
- entorno
- Banderas de cierre en ejecución (descritas en la subrutina exec )
- Ajustes de gestión de señales (como el valor SIG_DFL, el valor SIG_IGN y el parámetro Function Address )
- Establecer bit de modo de ID de usuario
- Establecer bit de modo de ID de grupo
- Estado de activación y desactivación de perfiles
- Valor de Niza
- ' Todas las bibliotecas compartidas adjuntas
- ID del grupo de proceso
- tty group ID (descrito en la subrutina exit, atexit, o _exit, subrutina signal, y subrutina raise )
- Directorio actual
- Directorio raíz
- Máscara de creación de modo de archivo (descrita en la subrutina umask )
- Límite de tamaño del fichero (descrito en la subrutina ulimit )
- ' Adjuntar segmentos de memoria compartida (descritos en la subrutina shmat )
- ' Adjuntar segmentos de archivo asignados (descritos en la subrutina shmat )
- ID del proceso depurador y bandera multiproceso si el proceso padre tiene habilitada la depuración multiproceso (descrita en la subrutina ptrace ).
El proceso hijo difiere del proceso padre de las maneras siguientes:
- El proceso hijo sólo tiene un hilo de usuario; es el que llamó a la subrutina fork.
- ' El proceso hijo tiene un ID de proceso único.
- El ID del proceso hijo no coincide con ningún ID de grupo de procesos activo.
- El proceso hijo tiene un ID de proceso padre diferente.
- El proceso hijo tiene su propia copia de los descriptores de fichero del proceso padre. Sin embargo, cada descriptor de archivo del proceso hijo comparte un puntero de archivo común con el descriptor de archivo correspondiente del proceso padre.
- ' Se borran todos los valores semadj. Para obtener información sobre los valores semadj, consulte la subrutina semop.
- ' Los bloqueos de proceso, bloqueos de texto y bloqueos de datos no son heredados por el proceso hijo. Para obtener información sobre bloqueos, consulte la subrutina plock.
- 'Si la depuración multiproceso está activada, las banderas ' rastrear ' se heredan del padre; en caso contrario, se reinician las banderas rastrear '. Para obtener información sobre la petición 0, consulte la subrutina ptrace.
- Las subrutinas del proceso hijo utime, stime, cutime y cstime se ponen a 0. (Para más información, consulte las subrutinas getrusage, times y vtimes )
- Las alarmas pendientes se borran en el proceso hijo. (Para más información, consulte las subrutinas incinterval, setitimer y alarm )
- El conjunto de señales pendientes para el proceso hijo se inicializa a un conjunto vacío.
- ' El proceso hijo puede tener su propia copia del catálogo de mensajes del proceso padre.
La subrutina F_ es similar a fork, excepto:
- Es necesario que el proceso hijo llame a una de las funciones de exec inmediatamente después de su creación. Dado que los manejadores de bifurcación nunca son llamados, los datos de la aplicación, los mutexes y los bloqueos están todos indefinidos en el proceso hijo.
La subrutina vfork está soportada como interfaz de compatibilidad para programas de sistema antiguos de la Berkeley Software Distribution (BSD) y puede utilizarse compilando con la Berkeley Compatibility Librarylibbsd.a).
En la versión 4 del sistema operativo, el proceso padre no tiene que esperar a que el hijo salga o se ejecute, como ocurre en los sistemas BSD. El proceso hijo recibe un nuevo espacio de direcciones, como en la subrutina fork. El proceso hijo no comparte ningún espacio de direcciones padre.
Para obtener información adicional, consulte el archivo /usr/lpp/GL/README .
Valores de retorno
Una vez completada con éxito, la subrutina fork devuelve el valor 0 al proceso hijo y devuelve el ID del proceso hijo al proceso padre. En caso contrario, se devuelve un valor de -1 al proceso padre, no se crea ningún proceso hijo y se establece la variable global errno para indicar el error.
Códigos de error
La subrutina de bifurcación no tiene éxito si se cumple una o más de las siguientes condiciones:
| Elemento | Descripción |
|---|---|
| FEAGA | Supera el límite del número total de procesos que se ejecutan en todo el sistema o por un único usuario, o el sistema no dispone de los recursos necesarios para crear otro proceso. |
| ENOMEM | No existe suficiente espacio para este proceso. |
| EPROCLIM | Si WLM está en ejecución, es posible que se haya cumplido el límite del número de procesos o hebras de la clase. |