国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

restart -g在centos7下面測試問題workermen4.1

www

while(1){
\pcntl_signal_dispatch();
//業(yè)務邏輯
}
這個代碼在ubuntu下測試能夠正常退出,但是在centos7下測試無法優(yōu)雅退出,請問是什么問題呢?

2030 4 0
4個回答

www

補充下,在ubuntu下,kill 主進程id,服務可以正常關閉,centos下無反應

  • 暫無評論
phpcreeper

單貼這么一個while()碎片代碼什么問題也看不出來, 另外kill發(fā)送的什么信號? 測試代碼貼全,測試步驟寫清楚。

  • www 2020-05-27

    while循環(huán)在onworkerstart里執(zhí)行,沒有監(jiān)聽端口只是單純的多進程任務,kill pid沒有指定特定的信號,主要現象就是在centos7下主進程收到restart -g或者stop -g命令時打印出stoping日志,然后就卡住了,子進程沒有退出,仍然在正常運行,但是在ubuntu下沒有這個問題,業(yè)務邏輯可以用sleep(1)或者其他,都一樣

  • www 2020-05-27

    不用考慮權限問題,業(yè)務邏輯問題,都試過的.目前發(fā)現centos里kill 主pid時,似乎子進程沒有收到信號,還在驗證中,請多多指點!

www

搞定了,不是沒收到信號,是信號被忽略了,自己重新安裝信號后,收到信號exit就可以了

  • 暫無評論
phpcreeper

解決了就好.

不過不清楚你具體都改了啥?workerman子進程里已經重裝過基于事件的信號,為什么還需要重裝下信號呢? 另外終端直接kill pid 默認發(fā)送的是SIGTERM信號,這和通過 php start.php xxxx -g 本質上是一樣的,workerman處理SITERM信號時,子進程如果有死循環(huán),就會導致子進程無法陷入事件循環(huán),進而導致信號就會處于未決狀態(tài),自然子進程就無法退出,換句話onWorkerStart回調里禁止使用while死循環(huán),既可能會引起進程阻塞也可能引起CPU飆升;但是如果直接CTRL+C 或者 php start.php stop 或者 kill -SIGINT pid,這三者本質一樣、而且事實上情況基本和前述類似,最大的區(qū)別是父進程會在必要的時間內期滿后強制干掉所有的子進程,即發(fā)送了kill -9 到所有的子進程;

  • www 2020-07-21

    多謝解答!我是因為業(yè)務需要在死循環(huán)里處理隊列數據,但是又擔心在重啟時因為強制退出會導致數據丟失,才提的這個問題,經實驗證明,在業(yè)務邏輯里重新注冊新號,可以實現平滑重啟需求.

年代過于久遠,無法發(fā)表回答
??