天天看點

PHP 實作守護程序

PHP 實作守護程式

守護程序

守護程序作為一種常駐程序服務,很常見,例如 PHP-FPM, NGINX,REDIS,都需要一個父程序來支援整個服務。但是用 PHP 編寫守護程序不多見,今天就來用 PHP 來實作一下。

步驟

● fork 子程序

● 父程序退出

● 設定新的會話

● 重置檔案掩碼

● 關閉标準輸入輸出

實作

我們對着以上的步驟來實作,在這之前需要 pcntl 和 posix 擴充,請確定安裝了。

PHP 實作守護程式

細節

PHP 實作守護程式

三者結果相同,說明了該程序即使程序組的組長,也是會話首領。

為什麼需要 umask (0)

當你在 linux 調用 umask 的時候你會看到一個掩碼值,這個掩碼決定了你建立檔案權限範圍,例如本人目前機器的 umask 為

0022

檔案的最大權限是 0666,而目錄的最大權限是 0777, 那麼目前使用者的建立的目錄權限就是 0755,對于目前使用者而言就是 rwx-rx-rx 權限。而檔案則是 0644,對于目前使用者而言 rw-r-r 權限。是以如果沒有重置掩碼的話,那麼對于目錄而言就是 0755,而檔案則是 0644 了。

注意

如果你在程序使用了 echo var_dump 等函數,一定要把标準輸出等重定向到其他檔案流中。新增加下面代碼就可以了

PHP 實作守護程式

因為在上面已經關閉了标準輸入輸出,此時檔案描述符 fd 已經沒有,所有重新打開之後 fd 從非負開始依次是 0,1,2。正好作為标準輸入輸出的檔案。當然重定向到那裡需要你自己設定。

最後的二次 fork

這個問題需要好好斟酌,因為是非必須的。目前想不到有什麼場景下必須兩次 Fork。

以上就是PHP 實作守護程序的詳細内容,更多請關注php交流群:

link