我正在尝试使用pcntl
PHP
扩展来在新线程中运行CLI
类的某些方法。我写了一个小测试方法:
private function startProcess($data)
{
$this->log('Start a child process');
$pid = pcntl_fork();
if($pid == -1)
$this->log('Could not fork');
elseif($pid)
pcntl_wait($status);
else {
$this->process($data);
sleep(10);
posix_kill(posix_setsid(), SIGTERM);
}
}
此方法被调用10次。 $this->process($data);
只是在控制台中打印数据。据我所知,它应该在退出后启动10个进程并打印我的数据。但相反,我会为每条消息等待10秒钟。哪里我错了?
答案 0 :(得分:2)
您正在等待每个进程在启动后立即完成。如果你真的想一次运行10个,不要等到你开始全部10个。
for($i = 0; $i < 10; $i++)
startProcess(...);
for($i = 0; $i < 10; $i++)
pcntl_wait($status);
private function startProcess($data)
{
$this->log('Start a child process');
$pid = pcntl_fork();
if($pid == -1)
$this->log('Could not fork');
elseif(!$pid) {
$this->process($data);
sleep(10);
posix_kill(posix_setsid(), SIGTERM);
}
}