来自pcnt​​l_fork的进程没有终止

时间:2013-10-23 15:55:49

标签: php linux apache fork daemon

我正在运行一个通过php + apache2参与守护进程的Web服务。所以我尝试了pcntl_fork功能。但是有一个问题是子进程没有终止,即使我在子进程的代码中使用exit(0)导致了很多apache2进程。

我想知道是否有办法关闭那些无用的apache2进程?

PS:因为我不太了解信号的机制,所以我尝试通过一次调用代理脚本来创建守护进程,代理脚本将在创建子进程后立即退出。

switch ($_GET['action']){
    case "new":
        $pid = pcntl_fork();
        switch ($pid){
            case -1: 
                echo "failed to create daemon";
                exit;
            case 0:
                //Code here
                exit(0);
                break;
            default:
                echo "Daemon PID:$pid";
        }
}

我打算用一个文件来控制守护进程。例如,我会在守护程序的控制文件中添加一行“exit”,例如“1.txt”,让它自行关闭。

PPS:在阅读了这个主题后:pcntl_fork() results in defunct parent process,如果僵尸进程错误导致了这个错误,我很好奇。

1 个答案:

答案 0 :(得分:1)

您必须使用此功能:

http://php.net/manual/en/function.pcntl-wait.php

但通常在Apache forking下可能不是一个好主意。