函数名称:pcntl_wait()
函数描述:pcntl_wait()函数用于等待或返回fork的子进程状态。
适用版本:PHP 4 >= 4.1.0, PHP 5, PHP 7
用法: int pcntl_wait ( int &$status [, int $options = 0 [, array &$rusage ]] )
参数:
- $status:用于存储子进程状态的变量。可以通过pcntl_wifexited()、pcntl_wifstopped()、pcntl_wifsignaled()、pcntl_wexitstatus()、pcntl_wtermsig()和pcntl_wstopsig()等函数来解析状态。
- $options(可选):用于指定等待选项的整数参数。默认值为0,表示阻塞等待子进程结束。
- $rusage(可选):用于存储子进程资源使用情况的数组。
返回值:
- 如果成功等待到一个子进程的结束,则返回子进程的进程ID。
- 如果发生错误,返回-1。
示例:
<?php
$pid = pcntl_fork();
if ($pid == -1) {
// 创建子进程失败
die('fork failed');
} elseif ($pid) {
// 父进程
pcntl_wait($status); // 等待子进程结束
if (pcntl_wifexited($status)) {
echo "子进程正常终止,退出状态为:" . pcntl_wexitstatus($status) . "\n";
} elseif (pcntl_wifstopped($status)) {
echo "子进程被暂停,暂停信号为:" . pcntl_wstopsig($status) . "\n";
} elseif (pcntl_wifsignaled($status)) {
echo "子进程被信号终止,终止信号为:" . pcntl_wtermsig($status) . "\n";
}
} else {
// 子进程
sleep(5); // 模拟子进程工作
exit(0); // 子进程正常退出
}
?>
在上面的示例中,我们使用pcntl_fork()函数创建了一个子进程。父进程使用pcntl_wait()函数等待子进程结束,并根据子进程的状态进行相应的处理。子进程在sleep()函数后调用exit()函数正常退出。父进程通过pcntl_wifexited()、pcntl_wifstopped()和pcntl_wifsignaled()等函数判断子进程的结束状态,并使用pcntl_wexitstatus()、pcntl_wstopsig()和pcntl_wtermsig()等函数获取相应的状态信息。