[attach]2421[/attach]
start -d 啟動出現(xiàn)了兩個master進程。讓我執(zhí)行stop的時候就會失敗。目前的情況是并不影響整個程序業(yè)務(wù)流程這些。
原因: 這個一般是誤刪 workerman 的主進程pid文件造成的;
解決: 在不影響服務(wù)的情況下, ps aux | grep xxxx | xargs kill 干掉其中被誤刪的那個主進程以及子進程;或者干脆全部kill 干掉重啟。
CoreServer 繼承了 Workerman\WebServer
我們發(fā)現(xiàn),在Worker::runAll()方法里面的static::daemonize()里,不正常服務(wù)器fork的兩次進程都在
我們有兩個服務(wù)器,其中一個服務(wù)器(正常),第一個fork的進程會被結(jié)束掉;
另外一個服務(wù)器(不正常)兩個主進程的,就會出現(xiàn)第一個fork也還在,所以就出現(xiàn)了兩個主進程。對這種沒有經(jīng)驗,不知道為啥會出現(xiàn)這種情況。
?
有問題的兩個主進程還會出現(xiàn)后面那張圖的關(guān)系
28828 和 28829 是分別對應(yīng)的兩個master進程的pid嗎? 兩臺機器的環(huán)境不一致嗎? OS是Linux 的哪個發(fā)行版?
另外檢查下異常機器上static::daemonize()里, 第二個pcntl_fork() 段里的 exit語句是不是被誤注釋或刪掉了? 還有這個CoreServer類里有沒有額外進行過 fork 的行為? 能想到的就這些了。
@614:28828 和 28829 就是那兩個master進程的pid,系統(tǒng)內(nèi)核版本情況,兩個系統(tǒng)都是一樣的:
Linux version 4.4.0-151-generic (buildd@lgw01-amd64-043) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #178-Ubuntu SMP Tue Jun 11 08:30:22 UTC 2019
搜了下CoreServer也沒有fork的額外行為。這個問題目前看來確實很奇怪。不影響整個程序的執(zhí)行使用,但是就不能平滑重啟了,必須每次kill了再啟動
@5370:
1、第二個fork 禁止去掉,那個是為了防止 svr4類系統(tǒng)獲得終端控制權(quán)而設(shè);
2、先確認下兩臺機器的PHP版本是否一致? 以確保pcntl擴展OK, 否則就是使用了有BUG的PHP;
3、如果PHP版本一致,那么懷疑極有可能是 glibc 的問題【即glibc的fork可能有bug】,你看下兩臺機器的 glibc 庫版本一致嗎?
謝謝@https://wenda.workerman.net/people/blogdaren。
問題找到了,安裝了一個grpc的擴展,然后這個擴展必須要給對應(yīng)的環(huán)境變量,不然fork的時候就會出現(xiàn)多一個掛載進程。給后來的同學(xué)參考:以后出現(xiàn)這類的問題,也可以考慮下安裝的擴展本身在workman進行fork的時候帶來的問題