wait4
Name
wait4 -- wait for process termination, BSD style
Synopsis
#include <sys/types.h>
#include <sys/resource.h>
#include <sys/wait.h> |
pid_t
wait4
(pid_t
pid, int *
status, int
options, struct rusage *
rusage);
Description
wait4() suspends execution of the current process
until a child (as specified by pid) 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 | | wait for any child process whose process group ID is equal to the
absolute value of pid. |
-1 | | wait for any child process; this is equivalent to calling
wait3(). |
0 | | wait for any child process whose process group ID is equal to that of
the calling process. |
> 0 | | 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 | | return immediately if no child is there to be waited for. |
WUNTRACED | | return for children that are stopped, and whose status has not been
reported. |
If status is not NULL, wait4()
stores status information in the location
status. This status can be evaluated with the
following macros:
Note: These macros take the status
value (an
int) as an argument -- not a pointer to the
value!
WIFEXITED(status) | | is nonzero if the child exited normally. |
WEXITSTATUS(status) | | evaluates to the least significant eight bits of the return code of
the child that 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 nonzero. |
WIFSIGNALED(status) | | returns true if the child process exited because of a signal that 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 nonzero. |
WIFSTOPPED(status) | | returns true if the child process that 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 that caused the child to stop. This
macro can only be evaluated if WIFSTOPPED()
returned nonzero. |
If rusage is not NULL, the
struct rusage (as defined in
sys/resource.h) that it points to will be filled
with accounting information. See getrusage()
for details.
Return Value
On success, the process ID of the child that exited is returned. On
error, -1 is returned (in particular, when
no unwaited-for child processes of the specified kind exist), or
0 if WNOHANG() was used
and no child was available yet. In the latter two cases, the global
variable errno
is set appropriately.
Errors
ECHILD | | No unwaited-for child process as specified does exist. |
ERESTARTSYS | | A WNOHANG() was not set and an unblocked signal or
a SIGCHILD was caught. This error is returned by
the system call. The library interface is not allowed to return
ERESTARTSYS, but will return
EINTR. |