Provided by: manpages-es_1.55-10_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'ON

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

       La funcion waitpid suspende la ejecucion del proceso en curso hasta que
       un  hijo especificado por el argumento pid ha terminado, o hasta que se
       produce una senal cuya accion es finalizar el proceso actual o llamar a
       la funcion manejadora de la senal.

       Si  el  hijo  especificado  por  pid  ha terminado cuando se produce la
       llamada (un proceso "zombie"), la funcion 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  mas  de las siguientes
       constantes:

       WNOHANG
              que significa  que  vuelve  inmediatamente  si  ningun  hijo  ha
              terminado.

       WUNTRACED
              que  significa  que tambien vuelve si hay hijos parados (pero no
              rastreados), y de cuyo estado no ha recibido  notificacion.   El
              estado  para  los  hijos rastreados que estan parados tambien se
              proporciona sin esta opcion.

       (Para opciones exclusivas de Linux, vea mas abajo.)

       Si status no es NULL, wait o waitpid almacena la informacion 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 -- ino  un  puntero
       al buffer!):

       WIFEXITED(status)
              es distinto de cero si el hijo termino normalmente.

       WEXITSTATUS(status)
              evalua  los ocho bits menos significativos del codigo de retorno
              del hijo que  termino,  que  podrian  estar  activados  como  el
              argumento  de  una  llamada  a exit() o como el argumento de unn
              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 termino a causa de una senal no
              capturada.

       WTERMSIG(status)
              devuelve el numero de la senal que provoco la muerte del proceso
              hijo. Esta macro solo puede ser evaluada si WIFSIGNALED devolvio
              un valor distinto de cero.

       WIFSTOPPED(status)
              devuelve  true  si  el  proceso hijo que provoco el retorno esta
              actualmente pardo; esto solamente es posible si  la  llamada  se
              hizo  usando  WUNTRACED  o  cuando el hijo esta siendo rastreado
              (vea ptrace(2)).

       WSTOPSIG(status)
              devuelve el numero de la senal que provoco la parada  del  hijo.
              Esta  macro  solamente puede ser evaluada si WIFSTOPPED devolvio
              un valor distinto de cero.   Algunas  versiones  de  Unix  (p.e.
              Linux,  Solaris, pero no AIX ni SunOS) definen tambien una macro
              WCOREDUMP(status) para comprobar si el proceso hijo  provoco  un
              volcado  de memoria.  Utilicela solamente encerrada entre #ifdef
              WCOREDUMP ... #endif.

VALOR DEVUELTO

       El ID del proceso del hijo que termino, o cero si se utilizo 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 accion de SIGCHLD.  Vea  tambien
              la seccion NOTAS DE LINUX sobre hilos.)

       EINVAL si el argumento options no fue valido.

       EINTR  si  no  se  activo  WNOHANG y si no se ha capturado una senal no
              bloqueada o SIGCHLD.

OBSERVACIONES

       The Single Unix  Specification  (Especificacion  para  un  Unix  Unico)
       describe un modificador SA_NOCLDWAIT (no soportado en Linux) tal que si
       este modificador esta activo, o bien se ha asignado SIG_IGN como accion
       para  SIGCHLD,  entonces  los  hijos  que  terminan no se convierten en
       zombies y una llamada a wait() o waitpid() se bloqueara hasta que todos
       los  hijos hayan terminado y, a continuacion, fallara asignando a errno
       el valor ECHILD.

       El estandar POSIX original establecio como indefinido el comportamiento
       de  tratar  SIGCHLD  con  SIG_IGN.   Estandares posteriores, incluyendo
       SUSv2   y   POSIX   1003.1-2001   especifican    este    comportamiento
       describiendolo  tan solo como una opcion conforme con XSI.  Linux no es
       conforme con el segundo de los dos puntos recien descritos: si se  hace
       una llamada a wait() o waitpid() mientras SIGCHLD esta 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 nucleo de Linux, un hijo planificado por  el  nucleo  no  es  una
       construccion distinta a un proceso. En su lugar, un hilo es simplemente
       un proceso que es creado usando la llamada al sistema  unica  en  Linux
       clone(2) ; otras rutinas como la llamada portable pthread_create(3) son
       implementadas usando clone(2).  Antes de la version 2.4. de  Linux,  un
       hilo  era  un caso especial de un proceso, y como consecuencia, un hilo
       no podia esperar al hijo de  otro  hilo,  incluso  cuando  este  ultimo
       pertenecia  al mismo grupo de hilos.  Sin embargo, POSIX recomienda tal
       funcionalidad, y desde la version 2.4. de Linux un hilo  puede,  y  por
       defecto  lo  hara,  esperar a hijos de otros hilos en el mismo grupo de
       hilos.

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

       __WCLONE
              Espera  por hijos "clone" solamente. Si se omite espera solo por
              hijos "no clone". (Un hijo "clone" es  el  que  al  terminar  no
              comunica  ninguna  senal,  o  una senal distinta de SIGCHLD a su
              padre.)  Esta  opcion  es  ignorada  si  se  especifica  tambien
              __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 opcion por defecto antes de la version
              2.4. de Linux.

CONFORME A

       SVr4, POSIX.1

V'EASE TAMBI'EN

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