0

我正在尝试使用pcntlextetntion在新线程中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 秒。我哪里错了?

4

1 回答 1

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);
    }
}
于 2013-07-16T12:38:24.147 回答