
pcntl_async_signals 与 pcntl_wait 无法同时使用?
在使用 pcntl_async_signals(true) 时,程序中存在两种阻塞父进程的方式:while 循环和 pcntl_wait()。其中,while 循环可以正常接收到 sigterm 信号并运行回调函数,而 pcntl_wait() 则不行。原因如下:
while 循环方式
while 循环阻塞主进程,同时通过 usleep() 函数提供了一个定时检测信号的机会。当收到 sigterm 信号时,usleep() 会触发 tick,从而触发信号回调函数的执行。
pcntl_wait 方式
pcntl_wait() 同样可以阻塞主进程,但默认情况下,它的第三个参数为 true,表示不会中断程序执行并调用回调函数。
要解决此问题,可以将 pcntl_signal() 的第三个参数设置为 false,如下所示:
pcntl_signal(SIGTERM, [$this, 'masterTermHandler'], false);
通过设置第三个参数为 false,当收到 sigterm 信号时,程序将中断执行并调用回调函数。这样一来,pcntl_wait() 方式也能正常接收到 sigterm 信号并运行回调函数。
以上就是## 使用 pcntl_async_signals(true) 时,为什么 pcntl_wait() 无法接收到信号?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1248790.html
微信扫一扫
支付宝扫一扫