项目场景:
项目场景:需要判断当前的环境中已经启动了几个进程。思路是QProcess中调用Shell命令获取进程的个数。
问题描述
1:实际使用的过程中,如果是非调试启动则可以正常判断进程的数量,如果是调试启动则不能判断进程的个数,部分代码如下:
QProcess process;
QString strCmd = "ps -ef |grep -c "+QString("进程名称");
process.start("bash", QStringList() <<"-c" << strCmd);
process.waitForFinished();
QString strResult = process.readAllStandardOutput();
qDebug()<<strResult;
原因分析:
这种方法有很大问题,莫名奇妙的,它无法正常过滤掉grep的进程(这里面还有点复杂,我一时半会也搞不明白咋回事,据说是grep会开子进程,并非grep那个子进程,而是开了一个与脚本相同的进程,导致出现问题失。
解决方案:
后来我改用pgrep指令,用这个命令的好处是,不用使用grep命令了,它直接找出来就是进程号,而且不会带入额外的进程号,下面我们来看下pgrep指令的具体用法。
#include <QCoreApplication>
#include <QDebug>
#include <QProcess>
#include <QStringList>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QString processName = "进程名称"; // 替换为你要检查的进程名
QProcess process;
// 使用pgrep命令统计进程数量
process.start("pgrep", QStringList() << "-c" << processName);
process.waitForFinished();
QString output = process.readAllStandardOutput();
int processCount = output.toInt();
qDebug() << "进程" << processName << "的数量为:" << processCount;
return a.exec();
}