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

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

www

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

2021 4 0
4個回答

www

補(bǔ)充下,在ubuntu下,kill 主進(jìn)程id,服務(wù)可以正常關(guān)閉,centos下無反應(yīng)

  • 暫無評論
phpcreeper

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

  • www 2020-05-27

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

  • www 2020-05-27

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

www

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

  • 暫無評論
phpcreeper

解決了就好.

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

  • www 2020-07-21

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

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