pcntl_waitpid
Description
The pcntl_waitpid of PCNTL for PHP waits on or returns the status of a forked child.
Syntax
pcntl_waitpid(
int $process_id,
int &$status,
int $flags = 0,
array &$resource_usage = []
): intParameters
process_id
The value of process_id can be one of the following:
| Value | Description |
|---|---|
| < -1 | wait for any child process whose process group ID is equal to the absolute value of process_id. |
| -1 | wait for any child process; this is the same behaviour that the wait function exhibits. |
| 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 process_id. |
NOTE: Specifying -1 as the process_id is equivalent to the functionality pcntl_wait() provides (minus flags).
status
pcntl_waitpid() will store status information in the status parameter which can be evaluated using the following functions: pcntl_wifexited(), pcntl_wifstopped(), pcntl_wifsignaled(), pcntl_wexitstatus(), pcntl_wtermsig() and pcntl_wstopsig().
flags
The value of flags is the value of zero or more of the following two global constants OR'ed together:
| Value | Contstant | Description |
|---|---|---|
| 1 | WNOHANG | Return immediately if no child has exited. |
| 2 | WUNTRACED | Return for children which are stopped, and whose status has not been reported. |
Return
Returns the process ID of the child which exited, -1 on error, or zero if WNOHANG was used and no child was available.
Examples
1 · process_id · < -1 · status
<? $process_id = -2; $return = pcntl_waitpid($process_id, $status); var_dump($return, $status);
int(-1) int(0)
2 · process_id · -1 · status
<? $process_id = -1; $return = pcntl_waitpid($process_id, $status); var_dump($return, $status);
int(-1) int(0)
3 · process_id · 0 · status
<? $process_id = 0; $return = pcntl_waitpid($process_id, $status); var_dump($return, $status);
int(-1) int(0)
4 · process_id · > 0 · status
<? $process_id = 1; $return = pcntl_waitpid($process_id, $status); var_dump($return, $status);
int(-1) int(0)
5 · flags · 0
<? $process_id = pcntl_fork(); $flags = 0; $return = pcntl_waitpid($process_id, $status, $flags); var_dump($return, $status);
int(-1) int(0)
6 · flags · WNOHANG
<? $process_id = pcntl_fork(); $flags = WNOHANG; $return = pcntl_waitpid($process_id, $status, $flags); var_dump($return, $status);
int(0) int(0)
7 · flags · WUNTRACED
<? $process_id = pcntl_fork(); $flags = WUNTRACED; $return = pcntl_waitpid($process_id, $status, $flags); var_dump($return, $status);
int(-1) int(0)
8 · resource_usage
<? $process_id = pcntl_fork(); $flags = WNOHANG; $return = pcntl_waitpid($process_id, $status, $flags, $resource_usage); var_dump($return, $status, $resource_usage);
int(0)
int(0)
array(0) {
}
9 · parent child
<?
$process_id = pcntl_fork();
if($process_id == -1)
{
die("pcntl_fork");
}
else if($process_id)
{
echo "parent: $process_id";
pcntl_waitpid($process_id, $status);//protect against zombie children
}
else
{
echo "child: $process_id";
}
child: 0
Links
PCNTL
- pcntl_alarm
- pcntl_async_signals
- pcntl_errno
- pcntl_exec
- pcntl_fork
- pcntl_get_last_error
- pcntl_getpriority
- pcntl_rfork
- pcntl_setpriority
- pcntl_signal
- pcntl_signal_dispatch
- pcntl_signal_get_handler
- pcntl_sigprocmask
- pcntl_sigtimedwait
- pcntl_sigwaitinfo
- pcntl_strerror
- pcntl_unshare
- pcntl_wait
- pcntl_wexitstatus
- pcntl_wifexited
- pcntl_wifsignaled
- pcntl_wifstopped
- pcntl_wstopsig
- pcntl_wtermsig