php实现 master-worker 守护多进程模式的实例代码


Posted in PHP onJuly 20, 2019

具体代码如下所示:

<?php
class Worker{
  public static $count = 2;
  public static function runAll(){
    static::runMaster();
    static::moniProcess();
  }
  //开启主进程
  public static function runMaster(){
    //确保进程有最大操作权限
    unmask(0);
    $pid = pcntl_fork();
    if($pid > 0){
      echo "主进程进程 $pid \n";
      exit;  
    }else if($pid == 0){
      if(-1 === posix_setsid()){
          throw new Exception("setsid fail");
      }
      for ($i=0; $i < self::$count; $i++) {
        static::runWorker();
      }
      @cli_set_process_title("master_process");
    }else{
      throw new Exception("创建主进程失败");
    }
  } 
  //开启子进程
  public static function runWorker(){
    unmask(0);
    $pid = pcntl_fork();
    if($pid > 0){
      // echo "创建子进程 $pid \n";
    }else if($pid == 0){
      if(-1 === posix_setsid()){
        throw new Exception("setsid fail");
      }
      @cli_set_process_title("worker_process");
      while(1){
        sleep(1);
      }
    }else{
      throw new Exception("创建子进程失败");
    }
  }
  //监控worker进程
  public function moniProcess(){
    while( $pid = pcntl_wait($status)){
      if($pid == -1){
        break;
      }else{
        static::runWorker();
      }
    }
  }
}
Worker::runAll();
ps -aux
USER    PID %CPU %MEM  VSZ  RSS TTY   STAT START  TIME COMMAND
root     1 0.0 0.0 18200 3076 pts/0  Ss+ 14:05  0:00 bash
root     6 0.0 0.0 18208 3252 pts/1  Ss  14:06  0:00 bash
root    19 0.0 0.0 18204 3248 pts/2  Ss+ 14:11  0:00 bash
root    64 0.0 0.2 348488 8320 ?    Ss  15:32  0:00 master_process
root    65 0.0 0.2 348488 8400 ?    Ss  15:32  0:00 worker_process
root    66 0.0 0.2 348488 8400 ?    Ss  15:32  0:00 worker_process
root    67 0.0 0.0 36640 2804 pts/1  R+  15:32  0:00 ps -aux

执行命令 kill 65,杀死进程 65 则master_process 进程会再自动开启一个子进程

USER    PID %CPU %MEM  VSZ  RSS TTY   STAT START  TIME COMMAND
root     1 0.0 0.0 18200 3076 pts/0  Ss+ 14:05  0:00 bash
root     6 0.0 0.0 18208 3252 pts/1  Ss  14:06  0:00 bash
root    19 0.0 0.0 18204 3248 pts/2  Ss+ 14:11  0:00 bash
root    64 0.0 0.2 348488 8320 ?    Ss  15:32  0:00 master_process
root    66 0.0 0.2 348488 8400 ?    Ss  15:32  0:00 worker_process
root    68 0.0 0.1 348488 5796 ?    Ss  15:34  0:00 worker_process
root    69 0.0 0.0 36640 2728 pts/1  R+  15:34  0:00 ps -aux

总结

以上所述是小编给大家介绍的php实现 master-worker 守护多进程模式的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

PHP 相关文章推荐
超强分页类2.0发布,支持自定义风格,默认4种显示模式
Jan 02 PHP
fleaphp rolesNameField bug解决方法
Apr 23 PHP
供参考的 php 学习提高路线分享
Oct 23 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
Dec 24 PHP
PHP获取一个字符串中间一部分字符的方法
Aug 19 PHP
php使用ereg验证文件上传的方法
Dec 16 PHP
php创建、获取cookie及基础要点分析
Jan 26 PHP
smarty模板判断数组为空的方法
Jun 10 PHP
php实现xml与json之间的相互转换功能实例
Jul 07 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
浅谈PHP各环境下的伪静态配置
Mar 13 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 PHP
PHP抽象类和接口用法实例详解
Jul 20 #PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
Jul 20 #PHP
Smarty模板语法详解
Jul 20 #PHP
Smarty模板变量与调节器实例详解
Jul 20 #PHP
Smarty模板配置实例简析
Jul 20 #PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 #PHP
php的优点总结 php有哪些优点
Jul 19 #PHP
You might like
windows下apache搭建php开发环境
2015/08/27 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
2015/05/19 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
2016/10/29 Javascript
JavaScript中的&quot;=、==、===&quot;区别讲解
2019/01/22 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
2019/04/19 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
Python实现高效求解素数代码实例
2015/06/30 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
python中update的基本使用方法详解
2019/07/17 Python
python实现邮件发送功能
2019/08/10 Python
使用python模拟命令行终端的示例
2019/08/13 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
白宫黑市官网:White House Black Market
2016/11/17 全球购物
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
安全大检查反思材料
2014/01/31 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书
创业计划书之游泳馆
2019/09/16 职场文书