【问题标题】:SIGCHILD not catching signal when child process dies子进程死亡时 SIGCHLD 未捕获信号
【发布时间】:2015-01-20 04:06:08
【问题描述】:

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

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

【问题讨论】:

  • 显然,如果我添加 declare(ticks = 1);令人困惑的是,从 5.3 开始,它已被弃用,但我找不到任何关于应该替换它的信息。
  • 你应该这样回答。

标签: php signals fork daemon pcntl


【解决方案1】:

如果我添加 declare(ticks = 1); 显然它会起作用令人困惑的是,从 5.3 开始,它已被弃用,但我找不到任何关于应该替换它的信息。

【讨论】:

    猜你喜欢
    • 2018-02-22
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多