Wait for the status of a terminated child process
Synopsis:
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait( int * stat_loc );
Arguments:
- stat_loc
- NULL, or a pointer to a location where the function can store the terminating status of the child.
For more information, see
Status macros,
below.
Library:
libc
Use the -l c option to
qcc
to link against this library.
This library is usually included automatically.
Description:
The wait() function suspends execution of the calling
thread until status information from one of its terminated child
processes is available, or until the delivery of a signal whose action
is either to terminate the process or execute a signal handler. If
status information is available prior to the call to wait(),
the return is immediate.
Note:
-
In order to wait for the status of a terminated child process whose real or saved user ID is different from
the calling process's real or effective user ID, your process must have the
PROCMGR_AID_WAIT ability enabled.
For more information, see
procmgr_ability().
- If the parent process sets the action for SIGCHLD to SIG_IGN,
its children won't enter the zombie state, and it won't be able to use
the wait*() functions to wait on their deaths.
- If the calling process is a guardian, it may wait on processes that are not its children (see procmgr_guardian()).
Status macros
If the stat_loc variable is non-NULL,
the terminating status of the child process is in the location that it
points to.
The macros listed below, defined in <sys/wait.h>, extract
information from stat_loc.
The stat_val argument to these macros is the integer value pointed to by stat_loc.
POSIX defines the following macros:
- WEXITSTATUS( stat_val )
- Evaluates to the low-order 8 bits of the termination status of the child process
if the value of WIFEXITED( stat_val ) is nonzero.
- WIFCONTINUED( stat_val )
- Evaluates to a nonzero value if the status returned was from a
child process that has continued from a job control stop.
- WIFEXITED( stat_val )
- Evaluates to a nonzero value if the status returned was from a normally terminated child process.
- WIFSIGNALED( stat_val )
- Evaluates to nonzero value if the child process terminated from reception of a signal that wasn't caught.
- WIFSTOPPED( stat_val )
- Evaluates to a nonzero value if the status returned is for a child process that's stopped.
- WSTOPSIG( stat_val )
- Evaluates to the number of the signal that caused the child process to stop
if the value of WIFSTOPPED( stat_val ) is nonzero.
- WTERMSIG( stat_val )
- Evaluates to the number of the signal that terminated the child process
if the value of WIFSIGNALED( stat_val ) is nonzero.
This macro isn't part of a POSIX standard:
- WCOREDUMP( stat_val )
- Evaluates to a nonzero value if the child process left a core dump.
One of the macros WIFEXITED(*stat_loc) and
WIFSIGNALED(*stat_loc)
evaluates to a nonzero value.
The non-POSIX
waitid()
function gives even more status information than the above macros.
Returns:
The process ID of the terminating child process, or -1 if an error occurred
or on delivery of a signal
(errno
is set to EINTR).
Errors:
- ECHILD
- The calling process has no existing unwaited-for child processes.
- EINTR
- The function was interrupted by a signal. The value of the location
pointed to by stat_loc is undefined.
- EPERM
- The calling process doesn't have the required permission; see
procmgr_ability().
Classification:
POSIX 1003.1
Safety: |
|
Cancellation point |
Yes |
Interrupt handler |
No |
Signal handler |
Yes |
Thread |
Yes |