什麼是守護程序?
乙個守護程序通常補認為是乙個不對終端進行控制的後台任務。它有三個很顯著的特徵:在後台執行,與啟動他的程序脫離,無須控制終端。常用的實現方式是fork() -> setsid() -> fork()
/*
*根據c語言的實現思路即可。
* 因為需要關閉 標準io,所以這裡使用redis方便測試。
*/<?php
//php**實現守護程序
function daemon()elseif($pid > 0)
//執行到這裡就是子程序
//2.建立乙個有別於終端的新session以脫離終端
$sid = posix_setsid();
if (!$sid)
//這一部不是必須的
$pid = pcntl_fork();
if($pid < 0)elseif($pid > 0)
//3.設定當前程序的工作目錄為根目錄,不依賴於其他
chdir("/");
設定為0確保將來程序有最大的檔案操作許可權
umask(0);
//5.關閉標準i/o流
if (defined('stdin'))
fclose(stdin);
if (defined('stdout'))
fclose(stdout);
if (defined('stderr'))
fclose(stderr);
}daemon();
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
while (true)
測試結果:
守護程序:
這裡較為關鍵的二個php函式是pcntl_fork()和posix_setsid()
以後臺方式執行php指令碼在命令列下,輸入:
nohup php /usr/local/src/daemon.php &
4. 關閉php後台程序
首先,我們需要查出該程序的pid,命令:
ps -ef | grep "php /usr/local/src/daemon.php"
然後,通過這個pid把該程序kill掉
kill -9 22767
其中,22767就是php後台程序的pid號。
5. 開機自啟
通過前面的步驟,我們知道如何開啟和關閉乙個php程序,但是,在實際的應用中,我們不可能每次都是手動開啟,這樣我們就會損失掉一部分業務資料,所以我們必須要讓該程序開機自動執行,步驟如下:
在/etc/rc.local檔案中,將nohup php /usr/local/src/daemon.php &這個命令加入即可。
PHP守護程序化
乙個守護程序通常補認為是乙個不對終端進行控制的後台任務。它有三個很顯著的特徵 在後台執行,與啟動他的程序脫離,無須控制終端。常用的實現方式是fork setsid fork 在glibc裡有乙個函式daemon。呼叫此函式,就可使當前程序脫離終端變成乙個守護程序,具體內容參見man daemon。p...
PHP程式守護程序化
php命令列程式實現守護程序化有2種方法 nohup php myprog.php log.txt 這裡就實現了守護程序化。單獨執行 php myprog.php,當按下ctrl c時就會中斷程式執行,會kill當前程序以及子程序。php myprog.php 這樣執行程式雖然也是轉為後台執行,實際...
PHP程式守護程序化
php命令列程式實現守護程序化有2種方法 nohup php myprog.php log.txt 這裡就實現了守護程序化。單獨執行 php myprog.php,當按下ctrl c時就會中斷程式執行,會kill當前程序以及子程序。php myprog.php 這樣執行程式雖然也是轉為後台執行,實際...