首先我們要知道建立守護程序的五個步驟:
建立子程序,終止父程序
在子程序中建立新會話
改變工作目錄(預設繼承了父程序的當前工作目錄)
重設檔案建立掩碼(預設繼承了父程序的檔案建立掩碼)
關閉檔案描述符(預設繼承了父程序開啟了的檔案)
還要安裝有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 下面就來試下。鏈式操作,說白了其實就是鏈式的...