Provided by: manpages-es_1.55-10_all 

NOMBRE
wait3, wait4 - esperan la terminación de un proceso, al estilo BSD
SINOPSIS
#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);
DESCRIPCIÓN
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:
< -1 lo que significa que espera por cualquier proceso hijo cuyo ID de grupo es igual al valor absoluto
de pid.
-1 que significa que espera por cualquier proceso hijo; esto es equivalente a llamar a wait3.
0 que significa esperar por cualquier proceso hijo cuyo ID de grupo es igual al del proceso
invocador.
> 0 que significa esperar por el proceso hijo cuyo ID es igual a pid.
El valor de options es un OR de cero o más de las siguientes constantes:
WNOHANG
que significa volver inmediatamente si no hay hijo por el que esperar.
WUNTRACED
que significa volver porque hay hijos que están parados (estado stop), y de cuyo estado no se ha
recibido notificación.
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!):
WIFEXITED(status)
es distinto de cero si el hijo terminó normalmente.
WEXITSTATUS(status)
evalúa los ocho bits menos significativos del código de retorno del hijo que terminó, que pueden
haber sido activados como un argumento en la llamada a la función exit() o como un argumento para
un return en el programa principal. Esta macro sólo puede ser evaluada si WIFEXITED devolvió un
valor distinto de cero.
WIFSIGNALED(status)
devuelve "true" si el proceso hijo terminó a causa de una señal no capturada.
WTERMSIG(status)
devuelve el número de la señal que causó el final del proceso hijo. Esta macro sólo puede ser
evaluada si WIFSIGNALED devolvió un valor distinto de cero.
WIFSTOPPED(status)
devuelve "true" si el proceso hijo que provocó el retorno está actualmente parado; esto sólo es
posible si la llamada se hizo usando WUNTRACED.
WSTOPSIG(status)
devuelve el número de la señal que provocó la parada del proceso hijo. Esta macro sólo puede ser
evaluada si WIFSTOPPED devolvió un valor distinto de cero.
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.
VALOR DEVUELTO
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.
ERRORES
ECHILD No existe un proceso hijo como el especificado y por el que no esperamos.
EINTR si no se activó WNOHANG y se capturó una señal no bloqueada o una SIGCHLD.
OBSERVACIONES
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).
CONFORME A
SVr4, POSIX.1
VÉASE TAMBIÉN
signal(2), getrusage(2), wait(2), signal(7)
Linux 23 junio 1997 WAIT4(2)