ABCDEFGHIJKLMNOPQRSTUVWXYZ

wait4

WAIT4(2)                   Linux Programmer's Manual                  WAIT4(2)



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  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.

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

NOTES
       Including <sys/time.h> is not required these days, but increases porta-
       bility.  (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
       signal(2), getrusage(2), wait(2), signal(7)



Linux                             1997-06-23                          WAIT4(2)