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 创建一个守护进程
来源: http://www.bubuko.com/infodetail-2273523.html