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 相关文章推荐
用DBSQL类加快开发MySQL数据库程序的速度
Oct 09 PHP
PHP Smarty生成EXCEL文档的代码
Aug 23 PHP
PHP 加密解密内部算法
Apr 22 PHP
php自定义函数之递归删除文件及目录
Aug 08 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
Jul 01 PHP
php加密算法之实现可逆加密算法和解密分享
Jan 21 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 PHP
php实现singleton()单例模式实例
Nov 06 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
Jun 02 PHP
PHP+AJAX 投票器功能
Nov 11 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
Feb 15 PHP
Laravel-admin之修改操作日志的方法
Sep 30 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
使用PHP+AJAX让WordPress动态加载文章的教程
2015/12/11 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
Vue开发之封装上传文件组件与用法示例
2019/04/25 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
vue中touch和click共存的解决方式
2020/07/28 Javascript
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
python正则表达式中的括号匹配问题
2014/12/14 Python
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
Python字符串逐字符或逐词反转方法
2015/05/21 Python
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
Python3基于sax解析xml操作示例
2018/05/22 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
django的model操作汇整详解
2019/07/26 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
成人教育自我鉴定
2013/11/01 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
董事长年会致辞
2015/07/29 职场文书