如何开始和结束新的PHP进程?

时间:2013-07-16 12:33:36

标签: php pcntl

我正在尝试使用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秒钟。哪里我错了?

1 个答案:

答案 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);
    }
}