PHP擴(kuò)展程序?qū)崿F(xiàn)守護(hù)進(jìn)程
一般Server程序都是運行在系統(tǒng)后臺,這與普通的交互式命令行程序有很大的區(qū)別。glibc里有一個函數(shù)daemon。調(diào)用此函數(shù),就可使當(dāng)前進(jìn)程脫離終端變成一個守護(hù)進(jìn)程,具體內(nèi)容參見man daemon。PHP中暫時沒有此函數(shù),當(dāng)然如果你有興趣的話,可以寫一個PHP的擴(kuò)展函數(shù)來實現(xiàn)。
PHP命令行程序?qū)崿F(xiàn)守護(hù)進(jìn)程化有2種方法:
一 、使用nohup
nohup php myprog.php > log.txt &
這里就實現(xiàn)了守護(hù)進(jìn)程化。
單獨執(zhí)行 php myprog.php,當(dāng)按下ctrl+c時就會中斷程序執(zhí)行,會kill當(dāng)前進(jìn)程以及子進(jìn)程。
php myprog.php &,這樣執(zhí)行程序雖然也是轉(zhuǎn)為后臺運行,實際上是依賴終端的,當(dāng)用戶退出終端時進(jìn)程就會被殺掉。
二、使用PHP代碼來實現(xiàn)
function daemonize() { $pid = pcntl_fork(); if ($pid == -1) { die("fork(1) failed!\n"); } elseif ($pid > 0) { //讓由用戶啟動的進(jìn)程退出 exit(0); } //建立一個有別于終端的新session以脫離終端 posix_setsid(); $pid = pcntl_fork(); if ($pid == -1) { die("fork(2) failed!\n"); } elseif ($pid > 0) { //父進(jìn)程退出, 剩下子進(jìn)程成為最終的獨立進(jìn)程 exit(0); } } daemonize(); sleep(1000);
用上面代碼即可實現(xiàn)守護(hù)進(jìn)程化,當(dāng)你的PHP程序需要轉(zhuǎn)為后臺運行時,只需要調(diào)用一次封裝好的函數(shù)daemonize()即可。
注:這里沒有實現(xiàn)標(biāo)準(zhǔn)輸入輸出的重定向。
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
相關(guān)文章
編譯PHP報錯configure error Cannot find libmysqlclient under usr的
這篇文章主要介紹了Linux上編譯PHP報錯configure error Cannot find libmysqlclient under usr的解決方法,需要的朋友可以參考下2014-06-06詳解cookie驗證的php應(yīng)用的一種SSO解決辦法
這篇文章主要介紹了詳解cookie驗證的php應(yīng)用的一種SSO解決辦法的相關(guān)資料,希望通過本文能幫助到大家讓大家遇到這種類似問題解決,需要的朋友可以參考下2017-10-10一些需要禁用的PHP危險函數(shù)(disable_functions)
有時候為了安全我們需要禁掉一些PHP危險函數(shù),整理如下需要的朋友可以參考下2012-02-02