25.查看php 某个服务的进程数

查看进程就是使用ps命令而已,只不顾ps的参数太多了。

  使用php查询的话,必须要开启几个函数(可以执行外部程序的函数),参考官网:http://php.net/manual/zh/book.exec.php

  下面是在php进程中查询某个服务创建的进程数,比如httpd,mysqld,sshd.......



  至于为什么要减2,可以看下面的代码:


  输出如下:
~/tmp/test $ ps -ef | grep httpd       #命令行直接运行命令
92193     1   0  7:09下午 ??         0:00.64 /usr/sbin/httpd -D FOREGROUND
92194 92193   0  7:09下午 ??         0:00.00 /usr/sbin/httpd -D FOREGROUND
94092 70178   0  7:30下午 ttys002    0:00.01 grep httpd
 ~/tmp/test $ php index.php            #使用php查询
Array
(
    [0] =>     0 92193     1   0  7:09下午 ??         0:00.64 /usr/sbin/httpd -D FOREGROUND
    [1] =>    70 92194 92193   0  7:09下午 ??         0:00.00 /usr/sbin/httpd -D FOREGROUND
    [2] =>   502 94109 94108   0  7:30下午 ttys002    0:00.00 sh -c ps -ef | grep httpd
    [3] =>   502 94111 94109   0  7:30下午 ttys002    0:00.00 grep httpd
)
Array
(
    [0] =>        4
)
  可以从上面的运行结果中就可以知道为什么要减2

使用grep -v "grep"过滤掉

/**
     * 是否有该进程执行中
     * 有必须单进程允许的任务调用该方法判断
     * @return boolean
     */
    public function haveRun() {
        if(YII_ENV==='dev'){
            return false;
        }
        $name = trim($GLOBALS['argv'][1]);
        $count = exec('ps -ax | grep "yii '.$name.'" | grep  -v "grep"| wc -l');
        echo "当前有".$count."进程,在执行中..请稍等....".PHP_EOL;
        return $count > 1;
    }

你可能感兴趣的:(25.查看php 某个服务的进程数)