SIGCHILD не перехватывает сигнал, когда умирает дочерний процесс

Я пытаюсь создать процесс демона, который обрабатывает несколько дочерних потоков. Но дочерний поток, похоже, не отправляет сигнал обратно родительскому для вызова функции. я попытался вывести его из класса и сделать стандартной функцией, но это тоже не помогает.

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

person DAB    schedule 21.11.2014    source источник
comment
по-видимому, это работает, если я добавляю declare(ticks = 1); что сбивает с толку, так это то, что это устарело с версии 5.3, но я не могу найти никакой информации о том, что должно его заменить.   -  person DAB    schedule 22.11.2014
comment
вы должны сделать это ответом.   -  person pilcrow    schedule 22.11.2014


Ответы (1)


по-видимому, это работает, если я добавляю declare(ticks = 1); что сбивает с толку, так это то, что это устарело с версии 5.3, но я не могу найти никакой информации о том, что должно его заменить.

person DAB    schedule 22.11.2014