PHP程序守護進程化實現(xiàn)方法詳解
一般Server程序都是運行在系統(tǒng)后臺,這與普通的交互式命令行程序有很大的區(qū)別。glibc里有一個函數(shù)daemon。調(diào)用此函數(shù),就可使當前進程脫離終端變成一個守護進程,具體內(nèi)容參見man daemon。PHP中暫時沒有此函數(shù),當然如果你有興趣的話,可以寫一個PHP的擴展函數(shù)來實現(xiàn)。
PHP命令行程序?qū)崿F(xiàn)守護進程化有2種方法:
一 、使用nohup
nohup php myprog.php > log.txt &
這里就實現(xiàn)了守護進程化。
單獨執(zhí)行 php myprog.php,當按下ctrl+c時就會中斷程序執(zhí)行,會kill當前進程以及子進程。
php myprog.php &,這樣執(zhí)行程序雖然也是轉(zhuǎn)為后臺運行,實際上是依賴終端的,當用戶退出終端時進程就會被殺掉。
二、使用PHP代碼來實現(xiàn)
function daemonize() { $pid = pcntl_fork(); if ($pid == -1) { die("fork(1) failed!\n"); } elseif($pid > 0) { //讓由用戶啟動的進程退出 exit(0); } //建立一個有別于終端的新session以脫離終端 posix_setsid(); $pid = pcntl_fork(); if ($pid == -1) { die("fork(2) failed!\n"); } elseif($pid > 0) { //父進程退出, 剩下子進程成為最終的獨立進程 exit(0); } } daemonize(); sleep(1000);
用上面代碼即可實現(xiàn)守護進程化,當你的PHP程序需要轉(zhuǎn)為后臺運行時,只需要調(diào)用一次封裝好的函數(shù)daemonize()即可。
注:這里沒有實現(xiàn)標準輸入輸出的重定向。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
php數(shù)組函數(shù)array_key_exists()小結(jié)
本文給大家匯總介紹了php數(shù)組函數(shù)array_key_exists()的相關(guān)知識以及與in_array的性能對比,與isset的區(qū)別分析,非常的詳細,有需要的小伙伴可以參考下。2015-12-12PHP 實現(xiàn)多服務器共享 SESSION 數(shù)據(jù)
稍大一些的網(wǎng)站,通常都會有好幾個服務器,每個服務器運行著不同功能的模塊,使用不同的二級域名,而一個整體性強的網(wǎng)站,用戶系統(tǒng)是統(tǒng)一的,即一套用戶名、密碼在整個網(wǎng)站的各個模塊中都是可以登錄使用的。2009-08-08WampServer下安裝多個版本的PHP、mysql、apache圖文教程
這篇文章主要介紹了WampServer下安裝多個版本的PHP、mysql、apache圖文教程,需要的朋友可以參考下2015-01-01PHP數(shù)據(jù)庫編程之MySQL優(yōu)化策略概述
這篇文章主要介紹了PHP數(shù)據(jù)庫編程之MySQL優(yōu)化策略,簡單講述了mysql優(yōu)化的簡單技巧以及索引優(yōu)化、查詢優(yōu)化、存儲優(yōu)化等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08PHP編程過程中需要了解的this,self,parent的區(qū)別
this是指向?qū)ο髮嵗囊粋€指針,在實例化的時候來確定指向;self是對類本身的一個引用,一般用來指向類中的靜態(tài)變量;parent是對父類的引用,一般使用parent來調(diào)用父類的構(gòu)造函數(shù)。2009-12-12