用php實現乙個簡單的守護程序,多程序

2021-09-27 07:45:17 字數 1306 閱讀 4553

首先我們要知道建立守護程序的五個步驟:

建立子程序,終止父程序

在子程序中建立新會話

改變工作目錄(預設繼承了父程序的當前工作目錄)

重設檔案建立掩碼(預設繼承了父程序的檔案建立掩碼)

關閉檔案描述符(預設繼承了父程序開啟了的檔案)

還要安裝有pcntl擴充套件,可通過php -m檢視是否安裝

然後直接上**

<?php

function

daemon()

// 3.改變工作目錄if(

chdir

('/'

)===

false

)// 4.重設檔案建立掩碼

umask(0

);// 5.關閉檔案描述符

fclose

(stdin);

fclose

(stdout);

fclose

(stderr);

break

;default

:// 這裡是父程序執行的** 直接退出即可

exit;

break;}

}//fork子程序

function

fork()

break

;default

:// 這裡是父程序執行的** ,將fork的子程序id 放入全域性變數$childs中

$childs

[$pid]=

$pid

;break;}

}//建立守護程序

daemon()

;//定義全域性變數

$childs=[

];//需要fork的子程序數,這裡建立3個子程序

$count=3

;//迴圈建立子程序

for($i=

0;$i<

$count;$i

++)//這裡判斷 當子程序的數量大於0 的時候 等待子程序的退出,並重新fork新的子程序

while

(count

($childs))

if(count

($childs

)<3)

}

需要注意的是守護程序不能有輸出

需要注意的是守護程序不能有輸出

需要注意的是守護程序不能有輸出

至此,乙個簡單的守護程序就建立好了,還有三個子程序,每當子程序出現問題退出後,都會重新建立乙個子程序來代替

可以結合控制訊號,給指令碼start|stop|reload等引數來實現更加便捷化的操作

是不是很簡單

乙個簡單的指令碼守護程序

專案過程中,經常會有很多的指令碼,shell指令碼 php指令碼 python指令碼等,更有一些指令碼是需要常駐記憶體執行的,簡而言之就是需要while true 的模式執行。但是有的時候,乙個常駐記憶體的程序會因為某些耗時操作而夯住,不再往下繼續執行,成為了乙個殭屍程序 或者因為某個操作偶然出錯,...

php 守護程序的實現

1 php沒有執行在安全模式,關掉安全模式,即 safe mode off 2 禁用函式列表 disable functions exec,system,shell exec,proc open,popen,一般來說,exec 這些函式為了安全,都會禁用,在php.ini裡面把這些禁用的函式放出來。...

用php實現乙個簡單的鏈式操作

最近在讀 php核心技術與最佳實踐 這本書,書中第一章提到用 call 方法可以實現乙個簡單的字串鏈式操作,比如,下面這個過濾字串然後再求長度的操作,一般要這麼寫 strlen trim str 那麼能否實現下面這種寫法呢?str trim strlen 下面就來試下。鏈式操作,說白了其實就是鏈式的...