1

複数の子スレッドを処理するデーモン プロセスを作成しようとしています。しかし、子スレッドは関数を呼び出すためにシグナルを親に送り返していないようです。私はそれをクラスから取り出して標準関数にしようとしましたが、それも役に立たないようです。

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

1 に答える 1

1

declare(ticks = 1); を追加すると明らかに機能します。紛らわしいのは、これが5.3の時点で非推奨になっていることですが、それを置き換えるものに関する情報が見つかりません.

于 2014-11-22T17:30:13.310 に答える