WAIT4(2) | Manual del Programador de Linux | WAIT4(2) |
wait3, wait4 - esperan la terminación de un proceso, al estilo BSD
#include <sys/types.h> #include <sys/time.h> #include <sys/resource.h> #include <sys/wait.h> pid_t wait3(int *status, int options, struct rusage *rusage); pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage);
La función wait3 suspende la ejecución del proceso actual hasta que finalice un hijo o hasta que se produzca una señal cuya acción sea finalizar el proceso actual o llamar a una función manejadora de señales. Si un hijo ha terminado ya cuando se realiza la llamada (lo que se conoce como proceso "zombie"), la función regresa inmediatamente. Todos los recursos del sistema utilizados por el hijo son liberados.
La función wait4 suspende la ejecución del proceso actual hasta que un hijo, especificado por el argumento pid, haya terminado o hasta que se produzca una señal cuya acción sea finalizar el proceso actual o llamar a una función manejadora de señales. Si el hijo especificado por pid ha terminado cuando se realiza la llamada (lo que se conoce como proceso "zombie"), la función regresa inmediatamente. Todos los recursos del sistema utilizados por el hijo son liberados.
El valor de pid puede ser uno de los siguientes:
El valor de options es un OR de cero o más de las siguientes constantes:
Si status no es NULL, wait3 o wait4 almacenan información de estado en la memoria apuntada por status.
Este estado puede ser evaluado con las siguientes macros (que toman como argumento el propio buffer (un int) — ¡no un puntero al buffer!):
Si rusage no es NULL, se rellenará la estructura structrusage, según se define en <sys/resource.h>, con información contable. Ver getrusage(2) para más detalles.
El ID del proceso hijo que terminó, -1 en caso de error (en particular, cuando no existe un proceso hijo, por el que no esperamos, del tipo especificado) o cero si se utilizó WNOHANG y no había ningún hijo disponible todavía. En los dos últimos casos errno será activado convenientemente.
Incluir <sys/time.h> no es obligatorio en la actualidad, pero incrementa la portabilidad. (De hecho, <sys/resource.h> define la estructura rusage con campos de tipo struct timeval definida en <sys/time.h>.)
El prototipo para estas funciones está disponible sólo si _BSD_SOURCE está definida (bine explícitamente, o implícitamente, no definiendo _POSIX_SOURCE o compilando con la opción -ansi).
SVr4, POSIX.1
23 junio 1997 | Linux |