wait4

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
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  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
       signal(2), getrusage(2), wait(2), signal(7)



Linux				  1997-06-23			     WAIT4(2)