<?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); } } ?>
时间: 2024-10-24 23:10:05