PHP擴展程序實現(xiàn)守護進程
一般Server程序都是運行在系統(tǒng)后臺,這與普通的交互式命令行程序有很大的區(qū)別。glibc里有一個函數daemon。調用此函數,就可使當前進程脫離終端變成一個守護進程,具體內容參見man daemon。PHP中暫時沒有此函數,當然如果你有興趣的話,可以寫一個PHP的擴展函數來實現(xiàn)。
PHP命令行程序實現(xiàn)守護進程化有2種方法:
一 、使用nohup
nohup php myprog.php > log.txt &
這里就實現(xiàn)了守護進程化。
單獨執(zhí)行 php myprog.php,當按下ctrl+c時就會中斷程序執(zhí)行,會kill當前進程以及子進程。
php myprog.php &,這樣執(zhí)行程序雖然也是轉為后臺運行,實際上是依賴終端的,當用戶退出終端時進程就會被殺掉。
二、使用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程序需要轉為后臺運行時,只需要調用一次封裝好的函數daemonize()即可。
注:這里沒有實現(xiàn)標準輸入輸出的重定向。
以上所述就是本文的全部內容了,希望大家能夠喜歡。
相關文章
編譯PHP報錯configure error Cannot find libmysqlclient under usr的
這篇文章主要介紹了Linux上編譯PHP報錯configure error Cannot find libmysqlclient under usr的解決方法,需要的朋友可以參考下2014-06-06一些需要禁用的PHP危險函數(disable_functions)
有時候為了安全我們需要禁掉一些PHP危險函數,整理如下需要的朋友可以參考下2012-02-02