有效地杀死Windows进程

时间:2012-07-05 07:32:39

标签: c++ windows qt process

我正在编写一个C ++ QT桌面应用程序,旨在在Windows操作系统上运行 此应用程序应枚举所有正在运行的进程,并将终止特定进程(由名称识别)。我知道有两种方法可以做到:

  1. 使用Windows API。
  2. 使用tasklist命令获取流程,taskkill结束流程。
  3. 在代码风格,效率和性能方面哪个选项更好?或者有第三种选择吗?

3 个答案:

答案 0 :(得分:5)

IMO,效率和性能不应该让您担心。你可能不会每秒杀死1000个进程,所以如果一个需要10毫秒而另一个需要100毫秒,我怀疑是否会有人关心。

因此,选择其中一个的论据主要是编程和维护的简易性。用于枚举进程的API并不是最简单的,但您可以在Web上找到许多示例(如here)。使用任务列表将需要获取输出并解析它。

我出于以下原因选择了API:

  1. 如果操作失败,您可以获得更多信息。您将确切地知道问题的确切位置,以及它是什么。
  2. 我不确定tasklisttaskkill是否保证在每台Windows计算机上。它们确实附带了操作系统,但是有人可能会认为它们扩大了攻击面或其他任何东西,然后移除它们。
  3. 解析文本容易出错。例如,我不知道tasklist的输出是否取决于操作系统区域设置。你呢?

答案 1 :(得分:0)

实际上我使用WMI并且我读过您可以使用WMI杀死进程

Terminate method of the Win32_Process Class

(仅供参考:))

我在其他应用程序中使用winAPI

答案 2 :(得分:0)

当然,您使用Windows Api。这比使用外部exe杀死进程更好。 您可以使用需要进程ID的OpenProcess获取进程句柄。打开后,您可以使用TerminateProcess提供流程处理。