使用 QProcess 获取所有正在运行的进程信息

Posted

技术标签:

【中文标题】使用 QProcess 获取所有正在运行的进程信息【英文标题】:get all running processes info using QProcess 【发布时间】:2010-04-13 19:31:54 【问题描述】:

几天前,我询问了如何使用 QProcess 获取系统中所有正在运行的进程。 我找到了一个可以将所有进程输出到文件的命令行:

C:\WINDOWS\system32\wbem\wmic.exe" /OUTPUT:C:\ProcessList.txt 处理获取标题

这将创建 C:\ProcessList.txt 文件,其中包含系统中所有正在运行的进程。 我想知道如何使用 QProcess 运行它并将其输出到变量。

似乎每次我尝试运行它并读取什么都没有发生:

QString program = "C:\\WINDOWS\\system32\\wbem\\wmic.exe";
QStringList arguments;
arguments << "/OUTPUT:C:\\ProcessList.txt" <<"PROCESS"<< "get"<< "Caption";

process->setStandardOutputFile("process.txt");
process->start(program,arguments);

QByteArray result = process->readAll();

我宁愿根本不创建 process.txt,而是将所有输出带到一个变量中......

【问题讨论】:

Kaycee -- 我投了赞成票,认为这不是一个问题,但仔细阅读后我发现它确实是。我的错。 您有 wmic 将输出发送到 c:\ProcessList.txt 并且您将 wmic 的标准输出重定向到 process.txt。您尝试将哪个输出存储在变量中? 我想将所有文件输出存储在地图中...文件输出如下: services.exe C:\Windows\system32\services services2.exe C:\Windows \system32\services services3.exe C:\Windows\system32\services 。 . .但由于某种原因,只保存了第一行... 【参考方案1】:

您可以使用“/OUTPUT:STDOUT”开关运行 wmic.exe,将进程信息直接打印到标准输出。但是,我无法通过 QProcess API 读取此信息并将其保存在变量中。这是我使用的代码:

#include <QtCore/QCoreApplication>
#include <QProcess>
#include <QDebug>

int main(int argc, char *argv[])

    QCoreApplication a(argc, argv);

    QProcess process;
    process.setReadChannel(QProcess::StandardOutput);
    process.setReadChannelMode(QProcess::MergedChannels);
//    process.start("cmd.exe /C echo test");
    process.start("wmic.exe /OUTPUT:STDOUT PROCESS get Caption");

    process.waitForStarted(1000);
    process.waitForFinished(1000);

    QByteArray list = process.readAll();
    qDebug() << "Read" << list.length() << "bytes";
    qDebug() << list;

此代码成功捕获“cmd.exe /C echo test”的输出,但不适用于 wmic.exe。似乎进程 wmic.exe 永远不会完成,我想它的标准输出永远不会被刷新,所以你不会通过 QProcess::readAll() 收到任何东西。

这就是我能给你的所有帮助。也许您或其他一些 SO 用户会在上面的 sn-p 中发现错误。

【讨论】:

【参考方案2】:

试试这个,效果会很好。

process.start("cmd", QStringList() << "/C" << "echo" << "process" << "get" << "caption" << "|" << "wmic");

【讨论】:

以上是关于使用 QProcess 获取所有正在运行的进程信息的主要内容,如果未能解决你的问题,请参考以下文章

Qt获取所有进程终止某个进程

QProcess - 正在运行的进程,其路径包含空格

Qt笔记-QProcess带管道符号运行及获取进程启动时间(Linux)

Qt笔记-QProcess带管道符号运行及获取进程启动时间(Linux)

在 PyQt 中使用 QProcess 运行类方法

如何在 Windows 上通过 QProcess 启动提升的子进程?