PHP在很多時候不適合做常駐的SHELl進程, 他沒有專門的gc例程, 也沒有有效的內存管理途徑.所以如果用PHP做常駐SHELL, 你會經常被內存耗盡導致abort而unhappy.
而且, 如果輸入數據非法, 而腳本沒有檢測, 導致abort, 也會讓你很不開心.
那? 怎麼辦呢?
呵呵, 別著急, 多進程來幫您!
那,這是為什麼呢?
優點:
1.使用多進程, 子進程結束以後, 內核會負責回收資源
2.使用多進程,子進程異常退出不會導致整個進程Thread退出.父進程還有機會重建流程.
3.一個常駐主進程, 只負責任務分發, 邏輯更清楚.
Then, 怎麼做呢?
接下來, 我們使用PHP提供的POSIX和Pcntl系列函數, 來實現一個PHP命令解析器, 主進程負責接受用戶輸入, 然後fork子進程執行, 並負責回顯子進程的結束狀態.
代碼如下, 我加了注釋, 如果有不懂的地方, 可以翻閱手冊相關函數, 或者回復留言.