用PHP写的多进程消费者 发布日期:2017-05-02 16:26:23     博主推荐★

废话不多说,直接上代码,这是一个没有整合的面向过程的代码,希望大神看了不要嫌弃


<?php
set_time_limit(0);
$debug = true;
$deamon = true;
$file = '/share/leo/deamon.pid';
$log = '/share/leo/deamon.log';
$params= getopt('s:n:h:');
if(empty($params)){
   die("\n-s [stop|start]\n-n [process number]\n-h (help)\n\n");
}
if(isset($params['s']) && $params['s'] == 'stop'){
  echo "开始关闭进程\n";
  $pid = file_get_contents($file);
  $pid_arr = explode(',',$pid);
  
  foreach($pid_arr as $pid){
     if(empty($pid)){
       continue;
     }
     posix_kill($pid,9) or die("关闭pid失败!\n");
  }
  fopen($file,'a+');
  unlink($file) or die("关闭进程失败!\n");
  die("进程关闭\n");
}elseif(isset($params['s']) && $params['s'] == 'start'){
   //判断有没有n
   $fork_number = 1;
   if(isset($params['n']) && intval($params['n'])>0){
      $fork_number = $params['n'];
   }
   if(file_exists($file)){
      die("进程已经存在了\n");
   }
   
}else{
   die("\n-s [stop|start]\n-n [process number]\n-h (help)\n\n");
}
if($deamon == true){
    $main_pid = posix_getpid();
    $count = 1;
    while(true){
      $pid = pcntl_fork();
      if($pid && ++$count > $fork_number){
         //file_put_contents('/share/leo/bug.bm',$main_pid.'-'.posix_getpid()."\n",FILE_APPEND);
         posix_kill($main_pid,SIGKILL) or die("\n主进程退出失败\n\n");
         exit(0);
      }
 //父进程和子进程都会执行下面代码
 if ($pid == -1) {
//错误处理:创建子进程失败时返回-1.
 die("could not fork\n");
 }
  
      if($pid == 0){
          file_put_contents($file,posix_getpid().",",FILE_APPEND);
          do{
              $str = date('Y-m-d H:i:s')."==".posix_getpid()."\n";
              file_put_contents($log,$str,FILE_APPEND);
          }while(true);
          exit(0);
      }
    }
    
}


博文地址:https://blog.ahamu.cn/blog/detail.html?id=134
   
推荐文章
  • 1
    sysbench
    2020/07/08
  • 2
    phper转java记录篇-spring boot
    2020/06/10
  • 3
    thinkphp5.0使用路由之后,post请求的
    2020/05/19
  • 4
    springboot单元测试aop失效
    2020/05/15
  • 5
    脑海中的JVM
    2020/05/12
  • 6
    IDEA搜索插件时显示search results
    2020/05/12
  • 7
    spring boot 配置加载源码查找
    2020/04/20
  • 8
    通过javap命令分析java汇编指令
    2020/04/16
  • 9
    IDEA小知识:查看JVM内存使用情况的步骤
    2020/04/16
  • 10
    springboot-加载自定义的properti
    2020/04/14
  • 11
    Jenkins执行shell脚本无法启动子进程解决
    2020/04/03
  • 12
    mac idea激活找专业的
    2020/04/02
  • 13
    Jenkins + DockerSwarm 实现弹
    2020/03/31
  • 14
    mac swarm学习过程
    2020/03/31
  • 15
    spring cloud
    2020/03/18
  • 16
    JAVA开发中遇到的问题记录002
    2020/03/12
  • 17
    JAVA开发中遇到的问题记录001
    2020/03/07
  • 18
    php -i查看信息
    2020/02/23
  • 19
    phpStorm中使用xdebug工具调试dock
    2019/12/09
  • 20
    讲的比较好的B+树执行原理的文章
    2019/12/09
最喜标签
NYOJ 面试 AJAX ping CentOS 灰度算法 YII2