我试图检索我的计算机上的活动进程,并搜索特定的一个,如果它存在,我应该杀死它。 是否有可能在不知道执行的具体路径的情况下执行该操作? 我知道执行进程的名称,但不是完整的路径。杀死进程时不知道使用Qt的全路径
因此,在短期:
- 获取所有活动的进程。
- 杀死特定进程。
谢谢!
我试图检索我的计算机上的活动进程,并搜索特定的一个,如果它存在,我应该杀死它。 是否有可能在不知道执行的具体路径的情况下执行该操作? 我知道执行进程的名称,但不是完整的路径。杀死进程时不知道使用Qt的全路径
因此,在短期:
谢谢!
AFAIK没有Qt特定的方式来做你想做的事情,所以你必须使用本地平台的API。您对哪个平台(Widnows,Unix,MacOS)感兴趣?
编辑: 看看MSDN过程函数参考:http://msdn.microsoft.com/en-us/library/ms684847(v=VS.85).aspx,特别是EnumProcesses,OpenProcess和TerminateProcess。我不会给你任何代码片段,因为我自己没有使用这个API(我只是把它加入了书签)。
就像是说,你能做到这一点的窗户很容易用胜利API:Enumerating All Processes & & Terminating a Process
为Linux,你可以尝试运行像水木清华“PS -A”使用QProcess并分析它的标准输出;水木清华这样的:
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]
希望这将给你如何进行的想法,认为
如果你是在MacOS或BSD您可以列出使用sysctl API的所有进程。
在Linux上,您可以做的最好的方法是查看source code to ps中的操作方法,该操作基本上可以浏览/proc
file system。
only Windows atm – kaycee 2010-04-12 17:54:06