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 相关文章推荐
一个用于MySQL的PHP XML类
Oct 09 PHP
PHP+AJAX实现无刷新注册(带用户名实时检测)
Dec 02 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
用PHP写的基于Memcache的Queue实现代码
Nov 27 PHP
php中防止SQL注入的最佳解决方法
Apr 25 PHP
php数组合并array_merge()函数使用注意事项
Jun 19 PHP
PHP 二级子目录(后台目录)设置二级域名
Mar 02 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
Apr 03 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
Aug 04 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 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 htmlspecialchars加强版
2010/02/16 PHP
PHP面向对象精要总结
2014/11/07 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
Javascript根据指定下标或对象删除数组元素
2012/12/21 Javascript
原生javascript实现拖动元素示例代码
2014/09/01 Javascript
JavaScript中textRange对象使用方法小结
2015/03/24 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
js实现录音上传功能
2019/11/22 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
Python实现保证只能运行一个脚本实例
2015/06/24 Python
Python实现计算最小编辑距离
2016/03/17 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
python安装twisted的问题解析
2018/08/21 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
python的re模块使用方法详解
2019/07/26 Python
Django中create和save方法的不同
2019/08/13 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
Django缓存Cache使用详解
2020/11/30 Python
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
应届生.NET方向面试题
2015/05/23 面试题
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
大学运动会通讯稿
2015/07/18 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript