0

我想一次只运行一个进程。所以我需要检查。我发现有人建议使用 exec()

所以我制作了测试函数——一个睡眠 1 分钟,一个测试进程是否正在运行。

public function test($a='', $b='') {
    exec("ps ax | grep 'php -q /var/www/glab/index.php ajax/test2'", $pids);
    if (count($pids) > 2) { 
        $exists = true;
        echo 'exists' . count($pids);

    print_r($pids);

    }
}

我得到结果:

exists3Array
(
    [0] => 30680 pts/8    S+     0:00 php -q /var/www/glab/index.php ajax/test2
    [1] => 30684 ?        S      0:00 sh -c ps ax | grep 'php -q /var/www/glab/index.php ajax/test2'
    [2] => 30686 ?        S      0:00 grep php -q /var/www/glab/index.php ajax/test2
)

我没想到有 3 个进程,但我认为它没问题。我可以确定我的功能工作正常吗 - 当 > 2 时检测到正在运行,我没有遗漏什么吗?例如,如果某些用户将在 linux 上运行某些程序,也许这将不再起作用?

或者你能建议一些只匹配一个进程的检查,没有 sh 和 grep?我的意思是确切的字符串。我正在尝试但无法使其仅匹配我正在搜索的一个。

编辑:

谷歌搜索了一下,发现了更多的例子,调整并有这个:

exec ('ps -efa | grep "php -q /var/www/glab/index.php ajax/test2" |grep -v "grep " | awk "{print $10 $NF}"',  $pids);
    print_r($pids);

进程运行时:

Array
(
    [0] => darius    2046 12877  5 09:23 pts/8    00:00:00 php -q /var/www/glab/index.php ajax/test2
)

它现在匹配 1 个进程。你能检查一下这是否可以,我没有遗漏什么吗?

4

0 回答 0