函数名:EvChild::createStopped()
适用版本:PHP Ev extension 0.2.0 或更高版本
用法:EvChild::createStopped() 函数用于创建一个EvChild对象,但该对象会被创建为“停止”状态,即不会立即开始运行。这种对象通常用于异步处理子进程。可以在后续的代码中使用 EvChild::start() 方法来启动该对象。
示例:
$loop = new EvLoop();
$child = EvChild::createStopped(function($watcher, $pid, $signum) {
// 子进程结束时会执行这里的回调函数
echo "子进程结束: " . $pid . ", 信号: " . $signum . PHP_EOL;
});
// 手动设置子进程id
$child->setPid(1234);
// 启用子进程的 watcher 事件
$child->start();
// 假设在某个时刻需要杀死子进程
posix_kill($child->pid, SIGKILL);
// 程序继续执行其他操作
// 停止子进程的 watcher 事件
$child->stop();
// 输出结果示例:
// 子进程结束: 1234, 信号: 9
在上面的示例中,我们首先创建了一个 EvLoop 对象,然后使用 EvChild::createStopped() 函数创建了一个 EvChild 对象,并传入一个回调函数来处理子进程结束的情况。接下来,我们手动设置了子进程的 id,并通过调用 EvChild::start() 方法来启动该对象的事件监听。在需要结束子进程时,我们使用 posix_kill()
函数发送了一个 SIGKILL 信号。最后,通过调用 EvChild::stop() 方法停止了子进程的事件监听。