使用Qt在不知道完整路径的情况下终止进程

时间:2010-04-12 17:10:05

标签: qt qprocess

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

简而言之:

  1. 获取所有有效流程。
  2. 杀死具体流程。
  3. 谢谢!

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

就像据说的那样,你可以使用win api相对容易地为windows做:Enumerating All Processes&& Terminating a Process

对于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]

希望这会让你知道如何继续,问候

答案 2 :(得分:0)

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

在Linux上,您可以做的最好的事情就是在source code to ps中查看它是如何完成的,这基本上是为了导航/proc file system