我想一次只运行一个进程。所以我需要检查。我发现有人建议使用 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 个进程。你能检查一下这是否可以,我没有遗漏什么吗?