waitid() — Wait for child process to change state
Standards
Standards / Extensions | C or C++ | Dependencies |
---|---|---|
XPG4.2 |
both |
Format
#define _XOPEN_SOURCE_EXTENDED 1
#include <sys/wait.h>
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
General description
The waitid() function suspends the calling process 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 before the call, waitid() returns immediately.
The idtype and id arguments are used to specify which children waitid() will wait for.
If idtype is P_PID waitid() will wait for the child with a process ID equal to (pid_t)id.
If idtype is P_GID waitid() will wait for any child with a process group ID equal to (pid_t)id.
If idtype is P_ALL waitid() will wait for any children and id is ignored.
- WCONTINUED
- Status will be returned for any child that has stopped and has been continued.
- WEXITED
- Wait for processes that have exited.
- WNOHANG
- Return immediately if there are no children to wait for.
- WNOWAIT
- Keep the process whose status is returned in infop in a waitable state. This will not affect the state of the process; the process may be waited for again after this call completes.
- WSTOPPED
- Status will be returned for any child that has stopped upon receipt of a signal.
The infop argument must point to a siginfo_t structure. If waitid() returns because a child process was found that specified the conditions indicated by the arguments idtype and options then the structure pointed to by infop will be filled in by the system with the status of the process. The si_signo member will always be equal to SIGCHLD.
Returned value
If waitid() returns due to the change of state of one of its children, it returns 0.
- Error Code
- Description
- ECHILD
- The calling process has no existing unwaited-for child processes.
- EINTR
- The waitid() function was interrupted due to the receipt of a signal by the calling process.
- EINVAL
- An invalid value was specified for options, or idtype and id specify an invalid set of processes.