如何开始和结束新的php过程?

如何开始和结束新的php过程?,php,pcntl,Php,Pcntl,我正在尝试使用pcntlextention forPHP在新线程中运行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
extention for
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秒钟才能收到每一条信息。我错在哪里?

您正在等待每个流程启动后立即完成。如果你真的想一次跑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);
    }
}
($i=0;$i<10;$i++)的

启动过程(…);
对于($i=0;$i<10;$i++)
pcntl_等待($状态);
私有函数startProcess($data)
{
$this->log('启动子进程');
$pid=pcntl_fork();
如果($pid==-1)
$this->log('cannotfork');
elseif(!$pid){
$this->process($data);
睡眠(10);
posix_kill(posix_setId(),SIGTERM);
}
}

pcntl\u wait
使父进程等待子进程返回状态。您的孩子做了一些事情,然后等待10秒钟。在孩子退出之前,家长不会做任何事情(您可以使用posix_kill)。你想完成什么?@Kirix-如果你不懂什么,请说你不懂的,打字???让你看起来很傻。这个答案是唯一正确的,他首先启动10个进程,然后在另一个块中等待它们的退出状态。你没有那样做。如果你需要澄清每个函数的作用,请像一个正常、聪明的人那样说。@N.B.那是在他编辑你的答案之前。所以尝试了一下,但它变成了一个僵尸程序@如果你想实现并行处理,我可以建议你使用线程吗?已经有相当一段时间了@N.B.刚试过,我很难过。。默认情况下,它不包含在php中,因此无法在生产服务器上使用。