当被信号中断时,有可能跳出循环吗?当我运行下面的代码时,如果我在循环的第一次迭代期间发送SIGINT,信号处理程序将被调用,但随后我又回到了循环中。我想先处理信号,然后跳过循环的其余部分(不退出脚本)。
<?php
declare(ticks = 1);
function sig_handler($signo) {
switch($signo) {
case SIGINT:
echo 'SIGINT' . PHP_EOL;
break;
default:
}
}
pcntl_signal(SIGINT, 'sig_handler');
$vars = array('foo', 'bar', 'baz');
foreach ($vars as $var) {
echo $var . PHP_EOL;
sleep(3);
}
// Do other stuff
?>输出(每次睡眠期间的ctrl+C):
$ php foreach_test.php
foo
SIGINT
bar
SIGINT
baz
SIGINT发布于 2013-12-07 00:10:28
从外观上看,你的"break“语句打破了"switch",而不是循环。相反,你可以这样说:
if ($signo == SIGINT){
echo 'SIGINT' . PHP_EOL;
break;
}https://stackoverflow.com/questions/10361133
复制相似问题