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+MSSQL分页的例子
Oct 09 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
Aug 26 PHP
JS 网站性能优化笔记
May 24 PHP
Php Ctemplate引擎开发相关内容
Mar 03 PHP
php与java通过socket通信的实现代码
Oct 21 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
php获取文件内容最后一行示例
Jan 09 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
php 删除一维数组中某一个值元素的操作方法
Feb 01 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 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 array的学习笔记
2012/05/10 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
jQuery TextBox自动完成条
2009/07/22 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
JavaScript闭包实例详解
2016/06/03 Javascript
javascript函数中的3个高级技巧
2016/09/22 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
vue+element+Java实现批量删除功能
2019/04/08 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
Python MySQLdb Linux下安装笔记
2015/05/09 Python
Python操作SQLite数据库的方法详解
2017/06/16 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
django-crontab 定时执行任务方法的实现
2019/09/06 Python
python将print输出的信息保留到日志文件中
2019/09/27 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
中国跨境海淘网站:考拉海购
2016/08/01 全球购物
英国著名音像制品和图书游戏购物网站:Zavvi
2016/08/04 全球购物
struct与class的区别
2014/02/03 面试题
小学教师的个人自我鉴定
2013/10/24 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
出纳工作检讨书
2014/10/18 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书