问题
今天在项目进行的过程中,发现无法Qprocess无法读取到进程名,判断进程是否在任务管理器中,总是返回空。
#include <QProcess>
#include <QProcessEnvironment>
#include <QStringList>
bool isProcessRunning(const QString &processName) {
QProcess process;
QStringList arguments;
bool processRunning = false;
// 根据操作系统选择不同的命令来获取运行中的进程列表
#if defined(Q_OS_WIN)
process.start("tasklist", arguments);
#elif defined(Q_OS_LINUX)
process.start("ps", arguments);
#elif defined(Q_OS_MAC)
process.start("ps", arguments);
#endif
if (process.waitForStarted()) {
while (process.waitForReadyRead()) {
QByteArray output = process.readAllStandardOutput();
// 根据操作系统解析输出内容
#if defined(Q_OS_WIN)
if (output.contains(processName.toLocal8Bit())) {
processRunning = true;
break;
}
#elif defined(Q_OS_LINUX) || defined(Q_OS_MAC)
if (output.contains(processName.toLocal8Bit() + " ")) {
processRunning = true;
break;
}
#endif
}
process.waitForFinished();
}
return processRunning;
}
// 使用示例
int main() {
if (isProcessRunning("notepad.exe")) {
// 进程正在运行
} else {
// 进程没有运行
}
return 0;
}
这样写,本身没有问题
可,用命令行去执行时就会发现,因为exe的名称太长,输出时的信息是不完整的。
也就是进程名称可能不完整。
解决方案
解决方案也很简单
加/FO csv参数即可
完整的命令行参数是这样的
tasklist /FO csv /FI “imagename
eq test.exe”
/FO显示完整信息
/FI过滤显示
编辑:myhappyandy