PHP守護程序化

2021-09-10 06:16:25 字數 1654 閱讀 9630

什麼是守護程序?

乙個守護程序通常補認為是乙個不對終端進行控制的後台任務。它有三個很顯著的特徵:在後台執行,與啟動他的程序脫離,無須控制終端。常用的實現方式是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 這樣執行程式雖然也是轉為後台執行,實際...