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和数据库结合的一个简单的web实例 代码分析 (php初学者)
Jul 28 PHP
php class中self,parent,this的区别以及实例介绍
Apr 24 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
Jun 06 PHP
php类常量的使用详解
Jun 08 PHP
PHP二维数组排序的3种方法和自定义函数分享
Apr 09 PHP
PHP实现简单汉字验证码
Jul 28 PHP
php日期操作技巧小结
Jun 25 PHP
PHP实现多级分类生成树的方法示例
Feb 07 PHP
PHP使用SMTP邮件服务器发送邮件示例
Aug 28 PHP
TP5框架简单登录功能实现方法示例
Oct 31 PHP
PHP的垃圾回收机制代码实例讲解
Feb 27 PHP
eval(cmd)与eval($cmd)的区别与联系
Jul 07 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
珊瑚虫IP库浅析
2007/02/15 PHP
PHP 开发环境配置(Zend Server安装)
2010/04/28 PHP
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
Thinkphp中Create方法深入探究
2014/06/16 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
layui清空,重置表单数据的实例
2019/09/12 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
Python数据库的连接实现方法与注意事项
2016/02/27 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
Python求平面内点到直线距离的实现
2020/01/19 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
Hoover胡佛官网:美国吸尘器和洗地机品牌
2019/01/09 全球购物
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
先进单位申报材料
2014/12/25 职场文书
十岁生日答谢词
2015/01/05 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
pytorch MSELoss计算平均的实现方法
2021/05/12 Python
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript