2
當被信號中斷時是否有可能跳出循環?當我運行以下代碼時,如果在循環的第一次迭代期間發送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
一個非常黑客的解決方案:在信號處理程序中設置全局變量並在每次循環迭代中檢查其值;如果變量已設置,則跳出循環。這讓我懷疑我是否應該以這種方式使用信號。 – ThisSuitIsBlackNot 2012-04-28 07:07:56