【发布时间】:2011-06-19 06:09:40
【问题描述】:
如何在仅使用 API 函数的 Windows 上按名称终止进程?
【问题讨论】:
-
什么操作系统?什么平台?
标签: windows kill-process
如何在仅使用 API 函数的 Windows 上按名称终止进程?
【问题讨论】:
标签: windows kill-process
假设您的意思是在 Windows 上,请使用 ZwQuerySystemInformation 和 TerminateProcess。有关详细示例,请参见此处:How to kill a process given a name
【讨论】:
如果杀死你的意思是带着极端偏见终止,那么总是有终止进程。如果您能找到其他方式(例如将 WM_CLOSE 发布到主窗口),我建议您不要使用它,因为当您调用 TerminateProcess 时,加载的 DLL 不会正确卸载,因此使用的资源可能不会被释放。
真正的问题是如何从名称中获取进程ID,这通常涉及
EnumProcesses()
EnumProcessModules()
GetModuleFileNameEx()
GetModuleBaseName()
并将生成的基本模块名称与您要查找的名称进行比较。但是在系统上执行的模块名称可能不止一个实例。在这种情况下,您将如何区分实例?
【讨论】:
killall yourprocess
http://en.wikipedia.org/wiki/Killall(请注意,这只适用于 Linux,因为您尚未指定操作系统)
【讨论】:
yourprocess 的进程。如果您有此流程的多个实例,这可能是个问题。
pgrep 然后kill 只有第一个,但这仍然不能解决任何问题 - 你怎么知道它是正确的?你没有。