PHP分叉工具产生僵尸进程


PHP forking tool produce zombie process

我是PHP分支的新手,我只是从PHP.net复制了这个代码样本。基本上,我有一个工具可以监视设备并将数据保存到数据库中。此工具在后台运行。

下面是我的代码:
for(;;)
{
//build connection
$conn = mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD);
//select db
mysql_select_db(DB_NAME);
$sql='SELECT * FROM tbl';
$query=mysql_query($sql,$conn);
$zpid=array();
while($res=mysql_fetch_assoc($query))
{
    $pid = pcntl_fork();
    $execute=0;
    if ($pid == -1) 
    {
       echo("could not fork");
    } 
    elseif ($pid) 
    {
        $execute++;
        //pcntl_wait($status);
        if ($execute>=5)
        {
            $child=pcntl_wait($status);
            if($child)
            {
                $execute--;
                echo 'exited child'.$child;
            }
        }
    } 
    else 
    {
        $obj=new Monitor($res['ip'],$res['community_string'],$res['id']);
        $obj->execute();
        //save
        $obj->insert_data();
       sleep(10);   
       exit();
    }
}
mysql_close($conn);
sleep(60);
}

但是当工具运行时,它会产生一个僵尸进程。我该怎么做才能防止服务器上的僵尸进程。请帮帮我。提前感谢

僵尸进程是指已经终止但尚未读取其退出状态的进程。当其父进程还没有调用wait()来读取退出状态时,就会发生这种情况。这里的pcntl_wait()就是这个调用,但是它必须为每个子调用,最有可能在fork之后的while($execute)中调用。这段代码从不对前4个子节点调用它。