我遇到了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();
答案 0 :(得分:0)
该问题与https://bugs.php.net/bug.php?id=71448#1463246578。
有关 7.1中引入的pcntl_async_signals()解决了这个问题。