在开启一个新的任务进程之前,需要获取 Linux
服务器当前正在运行某个进程的数量,以便对新进程的添加进行限制,我们知道 ps
命令可以查看进程, grep
命令可以对内容进行检索, wc
命令可以统计,我们把这三个命令结合起来就可以实现需求了。
直接上命令:
ps -ef | grep queue | grep -v grep | wc -l
具体参数是可以调整的,命令的意思就是查找含有 queue
关键词的进程(去掉 grep
本身),输出找到的进程数量。
运行结果:
[root@localhost ~]# ps -ef | grep queue | grep -v grep
root 4552 2822 0 10:14 ? 00:00:00 php yii parse-queue/listen 10
root 4553 2822 0 10:14 ? 00:00:00 php yii queue/listen 10
[root@localhost ~]# ps -ef | grep queue | grep -v grep | wc -l
2
可以看到这里有两个队列监听进程中含有 queue
。
结合一下 php
:
$cmd = 'ps -ef | grep api/import | grep -v grep | wc -l' . ' 2>&1';
exec($cmd, $out);
reset($out);
// 如果含关键字"api/import"进程数量大于1,则阻止新建进程
if (isset($out[0]) && intval($out[0]) > 1) {
return ['status' => 'error', 'message' => '服务器繁忙,请稍后重试'];
}
真实环境中使用请多测试几次,保证搜索的关键字唯一,不要把别的命令也统计进去了。