我在寫一個C++ QT桌面應用程序,打算在Windows操作系統上運行。
此應用程序應列舉所有正在運行的進程,並將殺死特定進程(按名稱識別)。有兩種方法我知道這樣做:有效殺死Windows進程
- 使用Windows API。
- 使用
tasklist
命令獲取過程,taskkill
結束該進程。
哪個選項是在代碼風格,效率和性能方面比較好?還是有第三種選擇?
我在寫一個C++ QT桌面應用程序,打算在Windows操作系統上運行。
此應用程序應列舉所有正在運行的進程,並將殺死特定進程(按名稱識別)。有兩種方法我知道這樣做:有效殺死Windows進程
tasklist
命令獲取過程,taskkill
結束該進程。哪個選項是在代碼風格,效率和性能方面比較好?還是有第三種選擇?
效率和性能不應該擔心你,IMO。你可能不會每秒殺死1000個進程,所以如果一個需要10ms,另一個需要100ms,我懷疑有人會關心。
所以,選擇其他的一個論據主要是簡化編程和維護。用於枚舉進程的API不是最簡單的,但您可以在Web上找到很多示例(如here)。使用任務列表將需要獲取輸出並解析它。
我會去爲這些原因,API:
tasklist
和taskkill
保證是每個Windows機器上。他們會隨操作系統一起提供,但有人可能會認爲他們擴大了攻擊面或其他任何東西,並將其刪除。tasklist
的輸出取決於操作系統區域設置。你做?當然可以用WINAPI ,你使用Windows Api。這比使用外部exe來殺死進程要好得多。 你可以使用OpenProcess來獲得進程句柄,這需要你一個進程ID。一旦你打開你可以使用TerminateProcess給出一個進程句柄。
你能否在你的陳述背後聲明「是更好的......」我不否認它 - 只是提出一種改進答案的方法。 –
一個原因是,如果你可以用幾行代碼來做到這一點,爲什麼你應該依賴一些外部的lib/dll。 – crypted
效率和性能是沒有意義的用於一次性操作。 – Jon
我在Java上遇到了此代碼的性能問題。因爲我在應用程序啓動過程中進行了三次枚舉...... – sara
只是很好,但爲什麼你在開始時要枚舉三次呢? –