PHP - PHP 7.0+中的pcntl问题。潜在的错误

时间:2017-03-30 15:47:42

标签: php php-7 php-5.6 pcntl

我遇到了PHP 7.0+的pcntl信号处理问题。问题是在某些情况下警报没有安排好。

以下示例适用于PHP 5.6,但不适用于PHP 7.0或7.1。

file.php

require_once('file2.php');

declare(ticks = 1);

// Add an alarm listener
pcntl_signal(SIGALRM, function() {
    var_dump("Triggered");

    // Re-schedule the alarm
    pcntl_alarm(5);
});

// Schedule the initial alarm
pcntl_alarm(5);

test();

file2.php

function test() {
    while(true) {
        sleep(2);
    }
}

使用PHP 5.6和7.0+的代码段。如果我们将代码合并到一个文件中,那么它就可以了。

declare(ticks = 1);

// Add a alarm listener
pcntl_signal(SIGALRM, function() {
    var_dump("here");

    // Re-schedule the alarm to be triggered
    pcntl_alarm(5);
});

// Set the initial alarm
pcntl_alarm(5);

function test() {
    while(true) {
        sleep(2);
    }
}

test();

1 个答案:

答案 0 :(得分:0)

该问题与https://bugs.php.net/bug.php?id=71448#1463246578

有关 7.1中引入的

pcntl_async_signals()解决了这个问题。