我試圖檢索我的計算機上的活動進程,並搜索特定的一個,如果它存在,我應該殺死它。 是否有可能在不知道執行的具體路徑的情況下執行該操作? 我知道執行進程的名稱,但不是完整的路徑。殺死進程時不知道使用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