1

我正在尝试检索计算机上的活动进程并搜索特定的进程,如果它存在,那么我应该杀死它。是否可以在不知道执行的具体路径的情况下做到这一点?我知道执行进程名称,但不知道完整路径。

简而言之:

  1. 获取所有活动进程。
  2. 杀死特定进程。

谢谢!

4

3 回答 3

0

AFAIK 没有特定于 Qt 的方式来做你想做的事,所以你必须使用本机平台 API。您对哪个平台(Widnows、Unix、MacOS)感兴趣?

编辑:看看 MSDN 进程函数参考: http: //msdn.microsoft.com/en-us/library/ms684847 (v=VS.85).aspx ,尤其是 EnumProcesses、OpenProcess 和 TerminateProcess。我不会给你任何代码片段,因为我自己没有使用过这个 API(我只是把它加了书签)。

于 2010-04-12T17:39:34.973 回答
0

就像有人说的那样,您可以使用 win api 相对容易地为 Windows 执行此操作:枚举所有进程&&终止进程

对于 linux,您可以尝试使用QProcess运行类似“ps -A”的 smth并解析其标准输出;像这样:

QProcess process;
process.setProcessChannelMode(QProcess::MergedChannels);
process.start("ps",  QStringList() << "-A");
if (!process.waitForStarted())
    return;
if (!process.waitForFinished())
    return;

//qDebug() << process.readAll();    
QByteArray output = process.readLine().trimmed();
while (!output.isEmpty())
{
    qDebug() << output;
    QList<QByteArray> items = output.split(' ');
    qDebug() << "pid:" << items.first() << " cmd:" << items.last();
    qDebug() << "===============================================";
    output = process.readLine().trimmed();
}

这应该返回一个正在运行的进程列表,您可以尝试不同的命令行选项ps来获取您需要的数据。我相信终止进程可以用同样的方式完成;通过运行kill [pid]

希望这会给你一个关于如何进行的想法,问候

于 2010-04-13T02:30:30.573 回答
0

如果您使用的是 MacOS 或 BSD,您可以使用sysctl API列出所有进程。

在 Linux 上,您似乎能做的最好的事情就是在ps 的源代码中查看它是如何完成的,这基本上是为了导航/proc文件系统

于 2010-04-15T01:08:04.217 回答