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 相关文章推荐
PHP入门学习笔记之一
Oct 12 PHP
PHP排序之二维数组的按照字母排序实现代码
Aug 13 PHP
用php实现选择排序的解决方法
May 04 PHP
php获取$_POST同名参数数组的实现介绍
Jun 30 PHP
PHP读取大文件的类SplFileObject使用介绍
Apr 09 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
Aug 18 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
Jul 13 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
Oct 27 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中使用与Perl兼容的正则表达式
2006/11/26 PHP
一步一步学习PHP(6) 面向对象
2010/02/16 PHP
带密匙的php加密解密示例分享
2014/01/29 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
PHP7匿名类用法分析
2016/09/26 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
js页面跳转常用的几种方式
2010/11/25 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
javascript校验价格合法性实例(必须输入2位小数)
2014/05/05 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
2014/09/25 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
2018/07/07 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
Vue 实时监听窗口变化 windowresize的两种方法
2018/11/06 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
Python读取Excel的方法实例分析
2015/07/11 Python
python遍历目录的方法小结
2016/04/28 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
2014/09/29 面试题
酒吧总经理岗位职责
2013/12/10 职场文书
2014年道德讲堂实施方案
2014/03/05 职场文书
竞争与合作演讲稿
2014/05/12 职场文书
电子商务专业求职信
2014/07/10 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
实操Python爬取觅知网素材图片示例
2021/11/27 Python
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python