PHP程式守護進程化執行個體詳解

來源:互聯網
上載者:User
一般Server程式都是運行在系統後台,這與普通的互動式命令列程式有很大的區別。glibc裡有一個函數daemon。調用此函數,就可使當前進程脫離終端變成一個守護進程,具體內容參見man daemon。PHP中暫時沒有此函數,當然如果你有興趣的話,可以寫一個PHP的擴充函數來實現。

PHP命令列程式實現守護進程化有2種方法:

一 、使用nohup

nohup php myprog.php > log.txt &

這裡就實現了守護進程化。

單獨執行 php myprog.php,當按下ctrl+c時就會中斷程式執行,會kill當前進程以及子進程。

php myprog.php &,這樣執行程式雖然也是轉為後台運行,實際上是依賴終端的,當使用者退出終端時進程就會被殺掉。

二、使用PHP代碼來實現

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);

用上面代碼即可實現守護進程化,當你的PHP程式需要轉為後台運行時,只需要調用一次封裝好的函數daemonize()即可。
註:這裡沒有實現標準輸入輸出的重新導向。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.