Provided by: manpages-es_1.55-8_all bug

NOMBRE

       wait, waitpid - espera por el final de un proceso

SINOPSIS

       #include <sys/types.h>
       #include <sys/wait.h>

       pid_t wait(int *status);
       pid_t waitpid(pid_t pid, int *status, int options);

DESCRIPCIÓN

       La  función  wait suspende la ejecución del proceso actual haste que un
       proceso hijo ha terminado, o hasta que se produce una señal cuya acción
       es  terminar  el  proceso actual o llamar a la función manejadora de la
       señal. Si un hijo ha salido cuando se produce la  llamada  (lo  que  se
       entiende por proceso "zombie"), la función vuelve inmediatamente. Todos
       los recursos del sistema reservados por el hijo son liberados.

       La función waitpid suspende la ejecución del proceso en curso hasta que
       un  hijo especificado por el argumento pid ha terminado, o hasta que se
       produce una señal cuya acción es finalizar el proceso actual o llamar a
       la función manejadora de la señal.

       Si  el  hijo  especificado  por  pid  ha terminado cuando se produce la
       llamada (un proceso "zombie"), la función vuelve inmediatamente.  Todos
       los recursos del sistema reservados por el hijo son liberados.

       El valor de pid puede ser uno de los siguientes:

       < -1   lo  que  significa  esperar a que cualquier proceso hijo cuyo ID
              del proceso es igual al valor absoluto de pid.

       -1     lo que significa que espera por cualquier proceso hijo; este  es
              el mismo comportamiento que tiene wait.

       0      lo  que  significa que espera por cualquier proceso hijo cuyo ID
              es igual al del proceso llamante.

       > 0    lo que significa que espera por el proceso hijo cuyo ID es igual
              al valor de pid.

       El  valor  de  options  es  un  OR  de  cero  o  más  de las siguientes
       constantes:

       WNOHANG
              que significa  que  vuelve  inmediatamente  si  ningún  hijo  ha
              terminado.

       WUNTRACED
              que  significa  que también vuelve si hay hijos parados (pero no
              rastreados), y de cuyo estado no ha recibido  notificación.   El
              estado  para  los  hijos rastreados que están parados también se
              proporciona sin esta opción.

       (Para opciones exclusivas de Linux, vea más abajo.)

       Si status no es NULL, wait o waitpid almacena la información de  estado
       en la memoria apuntada por status.

       Si  el  estado  puede  ser  evaluado  con las siguientes macros (dichas
       macros toman el buffer stat (un int) como argumento — ¡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  podrían  estar  activados  como  el
              argumento  de  una  llamada  a exit() o como el argumento de unñ
              return en el programa principal. Esta macro solamente puede  ser
              tenida  en  cuenta  si  WIFEXITED  devuelve 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 provocó la muerte 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 pardo; esto solamente es posible si  la  llamada  se
              hizo  usando  WUNTRACED  o  cuando el hijo está siendo rastreado
              (vea ptrace(2)).

       WSTOPSIG(status)
              devuelve el número de la señal que provocó la parada  del  hijo.
              Esta  macro  solamente puede ser evaluada si WIFSTOPPED devolvió
              un valor distinto de cero.   Algunas  versiones  de  Unix  (p.e.
              Linux,  Solaris, pero no AIX ni SunOS) definen también una macro
              WCOREDUMP(status) para comprobar si el proceso hijo  provocó  un
              volcado  de memoria.  Utilícela solamente encerrada entre #ifdef
              WCOREDUMP ... #endif.

VALOR DEVUELTO

       El ID del proceso del hijo que terminó, o cero si se utilizó WNOHANG  y
       no  hay  hijo disponible, o -1 en caso de error (en este caso, errno se
       pone a un valor apropiado).

ERRORES

       ECHILD si el proceso especificado en pid no termina o no  es  hijo  del
              proceso  llamante.   (Esto  puede  ocurrir para nuestros propios
              hijos si se asigna SIG_IGN como acción de SIGCHLD.  Vea  también
              la sección NOTAS DE LINUX sobre hilos.)

       EINVAL si el argumento options no fue valido.

       EINTR  si  no  se  activó  WNOHANG y si no se ha capturado una señal no
              bloqueada o SIGCHLD.

OBSERVACIONES

       The Single Unix  Specification  (Especificación  para  un  Unix  Único)
       describe un modificador SA_NOCLDWAIT (no soportado en Linux) tal que si
       este modificador está activo, o bien se ha asignado SIG_IGN como acción
       para  SIGCHLD,  entonces  los  hijos  que  terminan no se convierten en
       zombies y una llamada a wait() o waitpid() se bloqueará hasta que todos
       los  hijos hayan terminado y, a continuación, fallará asignando a errno
       el valor ECHILD.

       El estándar POSIX original estableció como indefinido el comportamiento
       de  tratar  SIGCHLD  con  SIG_IGN.   Estándares posteriores, incluyendo
       SUSv2   y   POSIX   1003.1-2001   especifican    este    comportamiento
       describiéndolo  tan solo como una opción conforme con XSI.  Linux no es
       conforme con el segundo de los dos puntos recién descritos: si se  hace
       una llamada a wait() o waitpid() mientras SIGCHLD está siendo ignorada,
       la llamada se comporta como si SIGCHLD no estuviera siendo ignorada, es
       decir,  se bloquea hasta que el siguiente hijo termina y luego devuelve
       el PID y el estado de ese hijo.

NOTAS DE LINUX

       En el núcleo de Linux, un hijo planificado por  el  núcleo  no  es  una
       construcción distinta a un proceso. En su lugar, un hilo es simplemente
       un proceso que es creado usando la llamada al sistema  única  en  Linux
       clone(2) ; otras rutinas como la llamada portable pthread_create(3) son
       implementadas usando clone(2).  Antes de la versión 2.4. de  Linux,  un
       hilo  era  un caso especial de un proceso, y como consecuencia, un hilo
       no podía esperar al hijo de  otro  hilo,  incluso  cuando  este  último
       pertenecía  al mismo grupo de hilos.  Sin embargo, POSIX recomienda tal
       funcionalidad, y desde la versión 2.4. de Linux un hilo  puede,  y  por
       defecto  lo  hará,  esperar a hijos de otros hilos en el mismo grupo de
       hilos.

       Las siguientes opciones específicas de Linux codificadas en options  se
       pueden utilizar con hijos creados usando clone(2).

       __WCLONE
              Espera  por hijos "clone" solamente. Si se omite espera sólo por
              hijos "no clone". (Un hijo "clone" es  el  que  al  terminar  no
              comunica  ninguna  señal,  o  una señal distinta de SIGCHLD a su
              padre.)  Esta  opción  es  ignorada  si  se  especifica  también
              __WALL.

       __WALL (Desde  Linux  2.4)  Espera por todos los hijos, sin importar su
              tipo ("clone" o "no clone").

       __WNOTHREAD
              (Desde Linux 2.4) No espera por hijos de otros hilos en el mismo
              grupo  de  hilos.  Era la opción por defecto antes de la versión
              2.4. de Linux.

CONFORME A

       SVr4, POSIX.1

VÉASE TAMBIÉN

       clone(2), ptrace(2), signal(2), wait4(2), pthread_create(3), signal(7)