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 相关文章推荐
NT IIS下用ODBC连接数据库
Oct 09 PHP
一个自定义位数的php多用户计数器代码
Mar 11 PHP
php创建多级目录代码
Jun 05 PHP
PHP 类型转换函数intval
Jun 20 PHP
php可生成缩略图的文件上传类实例
Dec 17 PHP
推荐10个提供免费PHP脚本下载的网站
Dec 31 PHP
PHP基于工厂模式实现的计算器实例
Jul 16 PHP
PHP中Array相关函数简介
Jul 03 PHP
laravel migrate初学常见错误的解决方法
Oct 11 PHP
php正确输出json数据的实例讲解
Aug 21 PHP
php 将json格式数据转换成数组的方法
Aug 21 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 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个人网站架设连环讲(一)
2006/10/09 PHP
用php实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
php简单压缩css样式示例
2016/09/22 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
javascript之通用简单的table选项卡实现(二)
2010/05/09 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
javascript中offset、client、scroll的属性总结
2015/08/13 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
基于JS脚本语言的基础语法详解
2017/07/22 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
python 二分查找和快速排序实例详解
2017/10/13 Python
详解python string类型 bytes类型 bytearray类型
2017/12/16 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
python读取Excel表格文件的方法
2019/09/02 Python
python+OpenCV实现图像拼接
2020/03/05 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
openCV提取图像中的矩形区域
2020/07/21 Python
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
潘多拉珠宝英国官方网上商店:PANDORA英国
2018/06/12 全球购物
公司庆典活动邀请函
2014/01/09 职场文书
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android