当子进程死亡时,SIGCHLD没有捕获信号

时间:2014-11-21 21:56:20

标签: php signals fork daemon pcntl

我正在尝试创建一个处理多个子线程的守护进程。但是子线程似乎没有将信号发送回父级来调用该函数。我试图把它从课堂上拿出来并使它成为一个标准的功能,但这似乎也无济于事。

class Daemon {
    public function __construct() {

        $set = pcntl_signal(SIGCHLD, array($this, 'childSignalHandler'));
        $pid = pcntl_fork();
        if ($pid == -1) {
            echo 'could not fork';
        } elseif ($pid) {
            // parent
            sleep(20);
            // this would keep running and spawn other children from time to time
        } else {
            // child
            sleep(5);
            // should call childSignalHandler() in parent
        }
    }

    public function childSignalHandler($pid) {
         echo 'child is dead';
    }
}

new Daemon();

1 个答案:

答案 0 :(得分:1)

显然它可以添加声明(ticks = 1);令人困惑的是,自5.3起已被弃用,但我无法找到有关应该替换它的信息。