【问题标题】:process from pcntl_fork not terminating来自 pcntl_fork 的进程未终止
【发布时间】:2013-11-02 00:26:47
【问题描述】:

我正在运行一个涉及 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";
        }
}

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

PPS:看完这个话题:pcntl_fork() results in defunct parent process,我很好奇是不是僵尸进程bug导致了这个bug。

【问题讨论】:

    标签: php linux apache fork daemon


    【解决方案1】:

    你应该使用这个函数:

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

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

    【讨论】:

    • 那么如果最好从 cli 运行“孵化器”进程并通过文本文件控制它?
    • 孵化器进程是个好主意,但是关于通信数据库或某种消息队列比文本文件更可靠。
    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2020-11-28
    • 2013-07-26
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多