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 set_time_limit()函数的使用详解
Jun 05 PHP
php制作中间带自己定义图片二维码的方法
Jan 27 PHP
php采集内容中带有图片地址的远程图片并保存的方法
Jan 03 PHP
phplot生成图片类用法详解
Jan 06 PHP
php读取文件内容到数组的方法
Mar 16 PHP
Apache连接PHP后无法启动问题解决思路
Jun 18 PHP
ThinkPHP开发框架函数详解:C方法
Aug 14 PHP
PHP连接数据库实现注册页面的增删改查操作
Mar 27 PHP
php array_pop 删除数组最后一个元素实例
Nov 02 PHP
centos 7.2下搭建LNMP环境教程
Nov 20 PHP
php利用嵌套数组拼接与解析json的方法
Feb 07 PHP
php反射学习之不用new方法实例化类操作示例
Jun 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使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
jQuery对象和DOM对象的相互转化实现代码
2010/03/02 Javascript
Dom 是什么的详细说明
2010/10/25 Javascript
浅析JavaScript中的类型和对象
2013/11/29 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
jQuery插件Easyui设置datagrid的pageNumber导致两次请求问题的解决方法
2016/08/06 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
Bootstrap导航条学习使用(一)
2017/02/08 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
Js数组扁平化实现方法代码总汇
2020/11/11 Javascript
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
Python中操作符重载用法分析
2016/04/29 Python
Django学习笔记之Class-Based-View
2017/02/15 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
纬创Java面试题笔试题
2014/10/02 面试题
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
中学生在校期间的自我评价分享
2013/11/13 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
家属联谊会致辞
2015/07/31 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL