根据
pcntl_wait的PHP文档,
The wait function suspends execution of the current process until a child has exited,or until a signal is delivered whose action is to terminate the current process or to call a signal handling function.
但是,当我运行以下代码并使用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
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。