Wait for a child process to change state
int waitid( idtype_t idtype,
siginfo_t * infop,
int options );
- Which children you want to wait for:
- P_PID — the child with a process ID of
- P_PGID — any child with a process group ID equal
- P_ALL — any child; id is ignored.
- The process or process group ID that you want to wait for, depending on
the value of idtype.
- A pointer to a
structure, where the function can store the current state of the child.
- A combination of zero or more of the following flags:
- WCONTINUED — return the status for any child that
was stopped and has been continued.
- WEXITED — wait for the process(es) to exit.
- WNOHANG — return immediately if there are no
children to wait for.
- WNOWAIT — keep the process in a waitable state.
This doesn't affect the state of the process; the process may be waited
for again after this call completion.
- WSTOPPED — wait for and return the process status
of any child that has stopped because it received a signal.
In QNX Neutrino, this is the same as WUNTRACED.
- WTRAPPED (a Unix extension) — wait for the
process(es) to stop at a debugger point of interest.
Use the -l c option to
to link against this library.
This library is usually included automatically.
The waitid() function suspends the calling thread until
one of its children changes state. It records the current state of a child
in the structure pointed to by infop. If a child process
changed state prior to the call to waitid(),
waitid() returns immediately.
||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 waitid() returns because a child
process was found that satisfied the conditions indicated by
the arguments idtype and options,
then the structure pointed
to by infop is filled in by the system with the status
of the process. The si_signo member is always
If idtype is P_ALL and options is
WEXITED|WTRAPPED, waitid() is equivalent to
- One of the children changed its state. If WNOHANG
was used, 0 can be returned (indicating no error); however, no children
may have changed state if info->si_pid is 0.
- An error occurred
- The set of processes specified by idtype and
id doesn't contain any unwaited-for processes.
- The infop argument points to an illegal address.
- The waitid() function was interrupted by a signal.
- An invalid value was specified for options,
or idtype and id specify an invalid set of processes.
POSIX 1003.1 XSI
“Detecting process termination”
in the “Processes” chapter of the QNX Neutrino Programmer's Guide