小编jfr*_*fra的帖子

PHP CLI pcntl无法在PHP7.0 Ubuntu xenial服务器上运行

我在PHP 5.5.9中使用此脚本:

declare(ticks = 1);

pcntl_signal(SIGTERM, array($this, 'stopSending'));
pcntl_signal(SIGINT, array($this, 'stopSending'));
pcntl_signal(SIGUSR1, array($this, 'stopSending'));
pcntl_signal(SIGUSR2, array($this, 'stopSending'));
pcntl_signal(SIGQUIT, array($this, 'stopSending'));
pcntl_signal(SIGHUP, array($this, 'stopSending'));

public function stopSending($signals)
{       
    echo "hello";
    exit();
}

while (true) {
    // some logic
}
Run Code Online (Sandbox Code Playgroud)

在Ubuntu 14中工作正常,但是当尝试使用PHP7.0在Ubuntu 16.04中执行并尝试发送信号(kill PID)时,PHP CLI不会停止并保持runnig.

在Ubuntu 16.04中,我检查了pcntl扩展,这没关系:

>php -m | grep pcntl
pcntl
Run Code Online (Sandbox Code Playgroud)

我跑步时没有任何错误,但都没有停止(或显示回声).

PHP7和pcntl有问题吗?

UPDATE

问题是将while循环封装到函数中时:

function start()
{
    while (true) {
        // some logic
    }
}

declare(ticks = 1);

pcntl_signal(SIGTERM, "stopSending");
pcntl_signal(SIGINT, "stopSending");
pcntl_signal(SIGUSR1, "stopSending");
pcntl_signal(SIGUSR2, "stopSending");
pcntl_signal(SIGQUIT, "stopSending");
pcntl_signal(SIGHUP, …
Run Code Online (Sandbox Code Playgroud)

php ubuntu php-7 ubuntu-16.04

5
推荐指数
1
解决办法
1266
查看次数

标签 统计

php ×1

php-7 ×1

ubuntu ×1

ubuntu-16.04 ×1