首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在信号处理程序返回时中断循环

问在信号处理程序返回时中断循环
EN

Stack Overflow用户
提问于 2012-04-28 14:15:16
回答 1查看 816关注 0票数 2

当被信号中断时,有可能跳出循环吗?当我运行下面的代码时,如果我在循环的第一次迭代期间发送SIGINT,信号处理程序将被调用,但随后我又回到了循环中。我想先处理信号,然后跳过循环的其余部分(不退出脚本)。

代码语言:javascript
复制
<?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):

代码语言:javascript
复制
$ php foreach_test.php
foo
SIGINT
bar
SIGINT
baz
SIGINT
EN

回答 1

Stack Overflow用户

发布于 2013-12-07 00:10:28

从外观上看,你的"break“语句打破了"switch",而不是循环。相反,你可以这样说:

代码语言:javascript
复制
if ($signo == SIGINT){
    echo 'SIGINT' . PHP_EOL;
    break;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10361133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档