Process::wait
最后更新于:2022-04-02 06:35:40
# Process::wait
[TOC]
回收结束运行的子进程。
~~~
array Process::wait(bool $blocking = true);
$result = array('code' => 0, 'pid' => 15001, 'signal' => 15);
~~~
* `$blocking`参数可以指定是否阻塞等待,默认为阻塞
* 操作成功会返回一个数组包含子进程的`PID`、退出状态码、被哪种信号`KILL`
* 失败返回`false`
> 子进程结束必须要执行wait进行回收,否则子进程会变成僵尸进程
> `$blocking`仅在1.7.10以上版本可用
> 使用`Process`作为监控父进程,创建管理子进程时,父类必须注册信号`SIGCHL`D对退出的进程执行`wait`,否则子进程一旦被`kill`会引起父进程退出
## 在异步信号回调中执行wait
~~~
Process::signal(SIGCHLD, function($sig) {
//必须为false,非阻塞模式
while($ret = Process::wait(false)) {
echo "PID={$ret['pid']}\n";
}
});
~~~
* 信号发生时可能同时有多个子进程退出
* 必须循环执行`wait`直到返回`false`
';