NAME

     wait3, wait4 - wait for process termination, BSD style


SYNOPSIS

     #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))


DESCRIPTION

     The wait3 function suspends execution of the current process
     until  a  child  has  exited, or until a signal is delivered
     whose action is to terminate the current process or to  call
     a  signal  handling function.  If a child has already exited
     by the time of the call (a so-called "zombie" process),  the
     function  returns immediately.  Any system resources used by
     the child are freed.

     The wait4 function suspends execution of the current process
     until  a  child as specified by the pid argument has exited,
     or until a signal is delivered whose action is to  terminate
     the  current  process or to call a signal handling function.
     If a child as requested by pid has  already  exited  by  the
     time  of  the call (a so-called "zombie" process), the func-
     tion returns immediately.  Any system resources used by  the
     child are freed.

     The value of pid can be one of:

     < -1 which means to wait for any child process whose process
          group ID is equal to the absolute value of pid.

     -1   which means to wait for  any  child  process;  this  is
          equivalent to calling wait3.

     0    which means to wait for any child process whose process
          group ID is equal to that of the calling process.

     > 0  which means to wait for the child whose process  ID  is
          equal to the value of pid.

     The value of options is a bitwise OR of zero or more of  the
     following constants:

     WNOHANG which means to return immediately  if  no  child  is
             there to be waited for.

     WUNTRACED
             which means to also return for  children  which  are
             stopped, and whose status has not been reported.

     If status is not NULL, wait3 or wait4 store status  informa-
     tion in the location pointed to by status.

     This status can  be  evaluated  with  the  following  macros
     (these macros take the stat buffer (an int) as an argument -
     not a pointer to the buffer!):

     WIFEXITED(status))
             is non-zero if the child exited normally.

     WEXITSTATUS(status))
             evaluates to the least significant eight bits of the
             return code of the child which terminated, which may
             have been set as the argument to a call to exit() or
             as  the  argument for a return statement in the main
             program.  This macro can only be evaluated if WIFEX-
             ITED returned non-zero.

     WIFSIGNALED(status))
             returns true if the child process exited because  of
             a signal which was not caught.

     WTERMSIG(status))
             returns the number of the  signal  that  caused  the
             child  process  to terminate. This macro can only be
             evaluated if WIFSIGNALED returned non-zero.

     WIFSTOPPED(status))
             returns true if the child process which  caused  the
             return  is  currently stopped; this is only possible
             if the call was done using WUNTRACED.

     WSTOPSIG(status))
             returns the number of the signal  which  caused  the
             child  to stop.  This macro can only be evaluated if
             WIFSTOPPED returned non-zero.

             If rusage is not NULL, the struct rusage as  defined
             in <sys/resource.h> it points to will be filled with
             accounting  information.    See   getrusage(2)   for
             details.


RETURN VALUE

     The process ID of the child which exited, -1  on  error  (in
     particular,  when  no  unwaited-for  child  processes of the
     specified kind exist) or zero if WNOHANG  was  used  and  no
     child was available yet.  In the latter two cases errno will
     be set appropriately.


ERRORS

     ECHILD
          No unwaited-for child process as specified does exist.

     ERESTARTSYS
          if WNOHANG was not set and an  unblocked  signal  or  a
          SIGCHLD  was caught. This error is returned by the sys-
          tem call.  The library  interface  is  not  allowed  to
          return ERESTARTSYS, but will return EINTR.


CONFORMING TO

     SVr4, POSIX.1


SEE ALSO

     signal(2), getrusage(2), wait(2),