PHP 使用pcntl实现守护进程

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

转载于:https://my.oschina.net/gzheng/blog/1533670

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值