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高手?学会“懒惰”的编程
Dec 05 PHP
mysql 搜索之简单应用
Apr 27 PHP
php daddslashes()和 saddslashes()有哪些区别分析
Oct 26 PHP
PHP @ at 记号的作用示例介绍
Oct 10 PHP
PHP基于工厂模式实现的计算器实例
Jul 16 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
Dec 18 PHP
微信公众平台DEMO(PHP)
May 04 PHP
php实现URL加密解密的方法
Nov 17 PHP
ThinkPHP中create()方法自动验证表单信息
Apr 28 PHP
PHP命令Command模式用法实例分析
Aug 08 PHP
PHP智能识别收货地址信息实例
Jan 05 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
Oct 01 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 CURL模拟GET及POST函数代码
2010/04/25 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
php中file_exists函数使用详解
2015/05/08 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
js 图片轮播(5张图片)
2008/12/30 Javascript
js+数组实现网页上显示时间/星期几的实用方法
2013/01/18 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
2015/03/31 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
Python基于DES算法加密解密实例
2015/06/03 Python
机器学习的框架偏向于Python的13个原因
2017/12/07 Python
python 字典修改键(key)的几种方法
2018/08/10 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
使用Python构造hive insert语句说明
2020/06/06 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
Python3+Django get/post请求实现教程详解
2021/02/16 Python
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
建筑设计所实习生自我鉴定
2013/09/25 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
先进个人总结范文
2015/02/15 职场文书
出国留学导师推荐信
2015/03/26 职场文书
Python Pandas pandas.read_sql函数实例用法
2021/06/21 Python