文档章节

PHP 使用pcntl实现守护进程

龚政
 龚政
发布于 2017/09/10 11:51
字数 143
阅读 24
收藏 0
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);   
}

© 著作权归作者所有

共有 人打赏支持
龚政
粉丝 1
博文 5
码字总数 906
作品 0
武汉
后端工程师
私信 提问
PHP实现PCNTL多进程任务

PHP使用PCNTL系列的函数也能做到多进程处理一个事务。比如我需要从数据库中获取80w条的数据,再做一系列后续的处理,这个时候,用单进程?你可以等到明年今天了。。。所以应该使用pcntl函数了...

p至尊宝
2016/03/31
39
0
一个作词家/cron-manager

cronManager 简介 cronManager是一个纯PHP实现的定时任务管理工具,api简单清晰,采用的是多进程模型,进程通信采用的是消息队列,任务监控也提供了简单的命令,方便易用 特性 多进程模型 支持守护...

一个作词家
2017/12/26
0
0
用PHP实现守护进程任务后台运行与多线程(php-resque使用说明)

消息队列处理后台任务带来的问题 项目中经常会有后台运行任务的需求,比如发送邮件时,因为要连接邮件服务器,往往需要5-10秒甚至更长时间,如果能先给用户一个成功的提示信息,然后在后台慢...

金三胖
2015/08/01
0
1
php安装gearman扩展实现异步分步式任务

一、简介 Gearman是一个分发任务的程序框架,它会对作业进行排队自动分配到一系列机器上。gearman跨语言跨平台,很方便的实现异步后台任务。php官方收录:http://php.net/manual/zh/book.gea...

bengozhong
2015/11/08
0
0
php多进程实现

PHP多进程实现 PHP有一组进程控制函数(编译时需要–enable-pcntl与posix扩展),使得php能在nginx系统中实现跟c一样的创建子进程、使用exec函数执行程序、处理信号等功能。 CentOS 6 下yum安装...

小田天
2016/11/28
8
0

没有更多内容

加载失败,请刷新页面

加载更多

RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
39分钟前
6
0

中国龙-扬科
昨天
1
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
5
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
8
0
在PC上测试移动端网站和模拟手机浏览器的5大方法

总结很全面,保存下来以备不时之需。原文地址:https://www.cnblogs.com/coolfeng/p/4708942.html

kitty1116
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部