Linuxx環境下,使用PHP創建一個守護進程
阿新 • • 發佈:2017-08-22
可能 true href ref manual 代碼 規則 sets else
<?php $pid = pcntl_fork(); // fork if ($pid < 0) exit; else if ($pid) // parent exit; else { // child $sid = posix_setsid(); if ($sid < 0) exit; for($i = 0; $i <= 60; $i++) { // do something for 5 minutes sleep(5); } } ?>
這是php官方手冊給出的方法,不過在Unix環境高級編程中有這樣一個提示:在基於System V的系統中,有些人建議再次焦勇fork,終止父進程,繼續使用子進程中的守護進程。這就保證了守護進程不是會話首進程,於是按照System V規則,可以防止它取得控制終端。
所以可能以下代碼會更好一些:
<?php $pid = pcntl_fork(); // fork if ($pid < 0) exit(‘fork fail‘); else if ($pid) // parent exit(0); else { // child $sid = posix_setsid(); if ($sid < 0) exit(‘set sid fail‘); $pid = pcntl_fork(); if ($pid < 0) exit(‘fork fail‘); else if ($pid) //parent process eixt(0); else { //chlid //code ....
exit(0); } } ?>
Linuxx環境下,使用PHP創建一個守護進程