php 多线程运行,判断子进程是否重复

$child_path = str_replace('_main', '_child', __FILE__);

            

        do{

            

            $flag = false;

        

            ///////////////////////////////////////////////

            //检查对应的进程是否已经运行         

            unset($out);

            unset($status);

            $exce_result = exec('ps ax | grep php', $out, $status);

            

            //执行命令成功

            if($status === 0){

                            

                //初始化

                $process_log_array = array();                   

            

                //////////////////////////////////

                //当前运行的php进程数组

                $process_array = $out;

                // var_dump($process_array);

                foreach($process_array as $process_key => $process_val){

                    

                    $process_val = trim($process_val);

                    

                    $pattern = '/'.str_replace('/', '\/', $child_path).'/iU';

                    

                    if(preg_match($pattern, $process_val)){

                        

                        $process_log_array[] = '任务进程存在:'.$process_val;

                        

                    }//判断是否有进程运行

                    

                }

                

                echo '当前子进程数为:'.count($process_log_array).'</br />';

                

                if(count($process_log_array) >= 10){

                    

                    echo '子进程过多, 休眠等待别的子进程执行完'.'</br />';

                    echo_contents();

                    

                    $flag = true;

                    sleep(5);

                }

            

            }else{

                

                echo "查看当前进程命令执行失败.".'</br />';

                echo_contents();

                

                $flag = true;

                sleep(5);

            

            }//判断拆分命令是否成功结束

        

        }while($flag == true);

        // ==================检测是否重复运行==================//

        unset($output);

        unset($return);

        $exce_result = exec('ps ax | grep  "/usr/bin/php '.$child_path.' --seting_id '.$seting_id.'"',$output,$return);

        $count = 0;

        if($output){

            var_dump('<p>开始</p>') ;

            var_dump($output) ;

            var_dump('<p>结束</p>') ;

            foreach($output as $row){

                $pattern = '/'.str_replace('/', '\/', $seting_id).'/iU';

                    

                if(preg_match($pattern, $row)){//包含   当前进程就可以认为是当前程序的进程

                    

                    $count++;

                    

                }//判断是否有进程运行

                // if(strpos($row,$seting_id) !== false){//包含index.php就可以认为是当前程序的进程

                //  $count++;

                // }

            }

        }

 

        if($count>2){//说明已经有进程在跑,退出

            var_dump('<font color="#FF00FF">进程正在进行:'.$seting_id.',此次循环跳过!</font>') ;

            continue;

        }

        //=========================END=======================//

        /////////////////////////////////////

        //启动子进程

        $command = '/usr/bin/php '.$child_path.' --seting_id '.$seting_id.' > /dev/null &';

 

        //清空执行shell命令返回的结果      

        unset($out);

        unset($status);

        $exce_result = exec($command, $out, $status);

        

        if($status === 0){

            $i_result = $mdb->query_update('ts_migration_seting', array('last_exec_datetime'=>date('Y-m-d H:i:s')), 'id='.$seting_id);

            

            echo "已启动进程:".$command.'</br /></br />';

            echo_contents();

            $new_start_number++;

        }

发布了17 篇原创文章 · 获赞 0 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览