QProcess判断启动了几个进程,根据进程的名称判断。遇到的问题。

文章讲述了在项目中使用QProcess获取进程数量时,遇到调试启动下计数错误的问题。原因是grep命令会创建额外的子进程。作者提供了使用pgrep指令作为替代方案,该方法可以直接获取进程号,避免了计数上的困扰。
摘要由CSDN通过智能技术生成

项目场景:

项目场景:需要判断当前的环境中已经启动了几个进程。思路是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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值