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数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
Nov 02 PHP
php图片加水印原理(超简单的实例代码)
Jan 18 PHP
用mysql_fetch_array()获取当前行数据的方法详解
Jun 05 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
Mar 18 PHP
PHP封装的Twitter访问类实例
Jul 18 PHP
PHP生成随机字符串(3种方法)
Sep 25 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 PHP
聊聊 PHP 8 新特性 Attributes
Aug 19 PHP
Git命令之分支详解
Mar 02 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利用COM对象访问SQLServer、Access
2006/10/09 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
PHP中如何使用session实现保存用户登录信息
2015/10/20 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
jQuery实现高亮显示网页关键词的方法
2015/08/07 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
2017/06/29 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
ES6函数实现排它两种写法解析
2020/05/13 Javascript
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
python访问纯真IP数据库的代码
2011/05/19 Python
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
Python简单定义与使用二叉树示例
2018/05/11 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
Python API自动化框架总结
2019/11/12 Python
python 弧度与角度互转实例
2020/04/15 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
美国性感内衣店:Yandy
2018/06/12 全球购物
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
PHP使用Redis队列执行定时任务实例讲解
2021/03/24 PHP
工商学院毕业生自荐信
2013/11/12 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
个人授权委托书
2014/04/03 职场文书
教代会闭幕词
2015/01/28 职场文书
销售开票员岗位职责
2015/04/15 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书