進程管理-防止進程成為僵尸進程
創(chuàng)建好了進程,那么怎么對子進程進行管理呢?
使用信號,對子進程的管理,一般有兩種情況:(推薦學習:PHP編程從入門到精通)
posix_kill():此函數(shù)并不能顧名思義,它通過向子進程發(fā)送一個信號來操作子進程,在需要要時可以選擇給子進程發(fā)送進程終止信號來終止子進程;
pcntl_waitpid():等待或返回fork的子進程狀態(tài),如果指定的子進程在此函數(shù)調用時已經退出(俗稱僵尸進程),此函數(shù)將立刻返回,并釋放子進程的所有系統(tǒng)資源,此進程可以避免子進程變成僵尸進程,造成系統(tǒng)資源浪費;
孤兒進程:父進程掛了,子進程被pid=1的init進程接管(wait/waitpid),直到子進程自身生命周期結束被系統(tǒng)回收資源和父進程 采取相關的回收操作
僵尸進程:子進程exit退出,父進程沒有通過wait/waitpid獲取子進程狀態(tài),子進程占用的進程號等描述資源符還存在,產生危害:例如進程號是有限的,無法釋放進程號導致未來可能無進程號可用
**父進程中使用:pcntl_wait或者pcntl_waitpid的目的就是防止worker成為僵尸進程
作用:使用pcntl_wait()后,在子進程死掉后,父進程也會被停止**
最后我們通過下圖來簡單的總結和描述這個多進程實現(xiàn)的過程:
進程管理-進程間通信
隊列:如Redis,推薦
socket:推薦
管道:實現(xiàn)復雜,且管道(pipe),使用文件形式存在,存在硬盤IO性能瓶頸
信號:承載信息量少,不好管理
進程管理-切換為守護進程
使用&實現(xiàn)
php deadloop.php &