我在写一个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
只是很好,但为什么你在开始时要枚举三次呢? –