当子进程死掉SIGCHILD不要再追信号(SIGCHILD not catching signal

2019-10-21 07:26发布

我试图创建一个守护进程来处理多个子线程。 但是子线程似乎并没有将信号发送回父调用的函数。 我曾试图把它拿出来之类的,并使它成为一个标准功能,但似乎并没有帮助的。

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();

Answer 1:

显然它的工作原理,如果我添加声明(蜱= 1); 什么是令人困惑的是,这个被弃用的5.3,但我不能找到什么是应该取代它的任何信息。



文章来源: SIGCHILD not catching signal when child process dies