WAIT4(2)                        BSD System Calls Manual

NAME
       wait3, wait4 - wait for process termination, BSD style

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

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  function  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 information 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 WIFEXITED 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  informa-
       tion.  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 lat-
       ter two cases errno will be set appropriately.

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

       EINTR  if WNOHANG was not set and an unblocked signal or a SIGCHLD was
              caught.

       EINVAL Invalid value for options given for wait4.


NOTES
       Including  <sys/time.h>  is  not  required  these  days, but increases
       portability.  (Indeed, <sys/resource.h> defines the  rusage  structure
       with fields of type struct timeval defined in <sys/time.h>.)

       The  prototype for these functions is only available if _BSD_SOURCE is
       defined  (either  explicitly,   or   implicitly,   by   not   defining
       _POSIX_SOURCE or compiling with the -ansi flag).


CONFORMING TO
       SVr4, POSIX.1

SEE ALSO
        cordeiro (otavio.wait4.org), costa (renatoc.wait4.org)
        mobus (fmobus.wait4.org), osório (osorio.wait4.org)
        sanchez (rnsanchez.wait4.org)

Linux                             1997-06-23                         WAIT4(2)