PHP 使用pcntl实现守护进程
博客专区 > 龚政 的博客 > 博客详情
PHP 使用pcntl实现守护进程
龚政 发表于3个月前
PHP 使用pcntl实现守护进程
  • 发表于 3个月前
  • 阅读 6
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

declare(ticks=1);
$top_pid = pcntl_fork();
// 结束父进程,子进程继续执行
if ($top_pid) {
	exit();
}
// 子进程脱离用户终端控制,成为新的会话组长
posix_setsid();

// 防止会话组长重新打开控制终端,再次创建子进程,并退出当前进程
$new_pid = pcntl_fork();
if ($new_pid) {
	exit();
}
chdir('/') && umask(0);
$workers = array();
while (true) {
	while (count($workers) >= 3) {
        $child_pid = pcntl_wait($status);
		if ($child_pid < 0) {
			file_put_contents('/tmp/error.log', 'error_no:'.$status.';error_msg:'.pcntl_get_last_error());
		}else{
            $index = array_search($child_pid, $workers);
            unset($workers[$index]);
        }       
	}
	$pid = pcntl_fork();
	if ($pid) {
		$workers[]=$pid;
        continue;
	}
    // 子进程执行
    sleep(20);
    file_put_contents('/tmp/daemon.log', date('Y-m-d H:i:s').json_encode($workers).PHP_EOL,FILE_APPEND);
    exit(0);   
}
标签: PHP pcntl
共有 人打赏支持
粉丝 0
博文 5
码字总数 906
×
龚政
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: