WAIT4(2)

NOMBRE
wait3, wait4 - espera por el final de un proceso, estilo BSD

SINOPSIS
#define _USE_BSD
#include <sys/types.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)

DESCRIPCION
La función wait3 suspende la ejecución del proceso activo actualmente hasta que un hijo ha terminado, o hasta que se produce una señal cuya acción es finalizar el proceso o llamar a una función manejadora de señales. Si un hijo ha terminado cuando se realiza la llamada (lo que se conoce como proceso "zombie"), la función retorna 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 ha terminado, o hasta que se produce una señal que finaliza el proceso actual o llama 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 retorna 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 llamante.

> 0 que significa esperar por el proceso hijo cuyo ID es igual a pid.

El valor de options es una 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 status puede ser evaluado con las siguientes macros (que toman como argumento el buffer stat (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, la estructura rusage según se define en <sys/resource.h> será cubierta con información explicativa. Ver getrusage(2) para detalles.

VALOR DE RETORNO
El ID del proceso hijo que terminó, -1 en caso de error o cero si se utilizó WNOHANG y no había ningún hijo disponible (en ese caso, errno será activado convenientemente).

ERRORES

ECHILD
    si el proceso hijo especificado en pid no existe.

ERESTARTSYS
    si no se activó WNOHANG y se capturó una señal no bloqueada o una SIGCHLD El interfaz de la librería no permite devolver ERESTARTSYS, pero devolverá EINTR.

DE ACUERDO CON
SVr4, POSIX.1

VER TAMBIEN
signal(2), getrusage(2), wait(2), signal(7)