实战指南:基于快马构建企业级x舆情监控系统数据采集模块
2026/6/6 10:26:07
在Ubuntu系统下使用Qt C++检测指定进程是否启动,可以通过以下步骤实现:
ps -C命令:通过进程名直接查询,避免grep误匹配问题。cpp
#include <QCoreApplication> #include <QProcess> #include <QDebug> bool isProcessRunning(const QString &processName) { QProcess process; // 执行ps -C命令查询进程 process.start("ps", QStringList() << "-C" << processName); process.waitForFinished(); if (process.exitStatus() == QProcess::NormalExit) { QByteArray output = process.readAllStandardOutput(); // 检查输出是否包含进程名(排除标题行) return !output.contains(processName.toUtf8(), Qt::CaseSensitive); } return false; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QString targetProcess = "SanliLisenter"; if (isProcessRunning(targetProcess)) { qDebug() << targetProcess << "is running"; } else { qDebug() << targetProcess << "is NOT running"; } return a.exec(); }ps -C参数:grep命令自身被匹配的问题。ps -C SanliLisenter会列出所有名为SanliLisenter的进程。PID TTY TIME CMD 1234 ? 00:00:01 SanliLisenterQProcess的退出状态,确保命令执行成功。false,可扩展错误日志记录。QStringList,支持批量检测。ps输出解析具体PID,用于后续操作(如发送信号)。sudo)。bash
qmake -project qmake make ./your_executable此方案直接利用系统命令,兼容性好且实现简洁,适合在Qt应用中集成进程监控功能。