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 相关文章推荐
一个程序下载的管理程序(一)
Oct 09 PHP
简体中文转换为繁体中文的PHP函数
Oct 09 PHP
PHP实现采集程序原理和简单示例代码
Mar 18 PHP
php 数组排序 array_multisort与uasort的区别
Mar 24 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
Mar 06 PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
Mar 06 PHP
php实现随机显示图片方法汇总
May 21 PHP
Laravel中如何增加自定义全局函数详解
May 09 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
php unlink()函数使用教程
Jul 12 PHP
PHP通过文件路径获取文件名的实例代码
Oct 14 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 socket客户端及服务器端应用实例
2014/07/04 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
jQuery写fadeTo示例代码
2014/02/21 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
angularjs ocLazyLoad分步加载js文件实例
2017/01/17 Javascript
Angularjs中使用轮播图指令swiper
2017/05/30 Javascript
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
[10:07]2014DOTA2国际邀请赛 实拍选手现场观战DK对阵Titan
2014/07/12 DOTA
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
[56:46]Liquid vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
python脚本爬取字体文件的实现方法
2017/04/29 Python
Python数据操作方法封装类实例
2017/06/23 Python
python实现机器人行走效果
2018/01/29 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
Numpy之reshape()使用详解
2019/12/26 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
2020/03/30 Python
PyQt5实现登录页面
2020/05/30 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
设计师个人求职信范文
2014/02/02 职场文书
六查六看自查材料
2014/02/17 职场文书
材料员岗位职责
2014/03/13 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
技术负责人岗位职责
2015/02/10 职场文书
spring cloud gateway中如何读取请求参数
2021/07/15 Java/Android