php – pcntl_wait没有被SIGTERM打断

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – pcntl_wait没有被SIGTERM打断脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
根据 pcntl_waitPHP文档,

但是,当我运行以下代码并使用kill -s SIGTERM [pid]将SIGTERM发送到父进程时,仅在子进程退出调用信号处理程序(即我必须等待睡眠完成.不应该pcntl_wait( )被SIGTERM打断?

fork_test.PHP

<?PHP
  declare(ticks = 1);

  function sig_handler($signo) {
    swITch ($signo) {
      case SIGTERM:
        echo 'SIGTERM' . PHP_EOL;
        break;
      default:
    }
  }

  pcntl_signal(SIGTERM,'sig_handler');

  $pid = pcntl_fork();

  if ($pid == -1) {
     die('Could not fork');
  }
  else if ($pid) {
    echo 'parent' . PHP_EOL;

    pcntl_wait($status);
  }
  else {
    echo 'child' . PHP_EOL;
    sleep(30);
  }
?>

输出(SIGTERM仅在等待30秒后出现):

$PHP fork_test.PHP
child
parent
SIGTERM

PHP版本=> 5.3.3

解决方法

您对pcntl_signal的调用指定应重新启动调用.检查 docs,认情况下restart_Syscalls为true.因此,在孩子终止之前,您对pcntl_signal的调用不会返回.

你没有调用flush.所以PHP可以在缓冲区中保存echo的输出.

因此,您看到的行为正是您要求的行为.重新启动系统调用并缓冲输出.

脚本宝典总结

以上是脚本宝典为你收集整理的php – pcntl_wait没有被SIGTERM打断全部内容,希望文章能够帮你解决php – pcntl_wait没有被SIGTERM打断所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。