2012-07-05 105 views
2

我在写一个C++ QT桌面应用程序,打算在Windows操作系统上运行。
此应用程序应列举所有正在运行的进程,并将杀死特定进程(按名称识别)。有两种方法我知道这样做:有效杀死Windows进程

  1. 使用Windows API。
  2. 使用tasklist命令获取过程,taskkill结束该进程。

哪个选项是在代码风格,效率和性能方面比较好?还是有第三种选择?

+5

效率和性能是没有意义的用于一次性操作。 – Jon

+0

我在Java上遇到了此代码的性能问题。因为我在应用程序启动过程中进行了三次枚举...... – sara

+0

只是很好,但为什么你在开始时要枚举三次呢? –

回答

5

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

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

我会去为这些原因,API:

  1. 你可以得到的情况下,操作失败的更多信息。你会确切地知道问题出在哪里,它是什么。
  2. 我不知道tasklisttaskkill保证是每个Windows机器上。他们会随操作系统一起提供,但有人可能会认为他们扩大了攻击面或其他任何东西,并将其删除。
  3. 解析文本很容易出错。我不知道,例如,如果tasklist的输出取决于操作系统区域设置。你做?
0

当然可以用WINAPI ,你使用Windows Api。这比使用外部exe来杀死进程要好得多。 你可以使用OpenProcess来获得进程句柄,这需要你一个进程ID。一旦你打开你可以使用TerminateProcess给出一个进程句柄。

+0

你能否在你的陈述背后声明“是更好的......”我不否认它 - 只是提出一种改进答案的方法。 –

+0

一个原因是,如果你可以用几行代码来做到这一点,为什么你应该依赖一些外部的lib/dll。 – crypted