按名称杀死进程
如何在 Windows 上仅使用 API 函数按名称杀死进程?
How can I kill a process by name on Windows with API functions only?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何在 Windows 上仅使用 API 函数按名称杀死进程?
How can I kill a process by name on Windows with API functions only?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
在 cmd 窗口中,您可以使用
taskkill /F /im cmd.exe
来终止所有 cmd.exe 程序。/T
标志告诉 taskkill 强制终止进程,而taskkill /im cmd.exe
通过发送终止信号来正常关闭它。关于taskkill的更多信息可以在此处找到,
另一个用于终止进程的好工具是< a href="https://www.cs.cmu.edu/~tgp/scsadmins/winadmin/WMIC_Queries.txt" rel="noreferrer">wmic
In a cmd window you can use
taskkill /F /im cmd.exe
to kill all cmd.exe programs.The
/T
flag tells taskkill to forcefully kill the processes, whereastaskkill /im cmd.exe
gracefully shuts it down by sending a kill signal.more information on taskkill can be found here
another great tool for terminating processes is wmic
如果你所说的“kill”是指以极端偏见终止,那么总是有“TerminateProcess”。如果您能找到其他方法(例如将 WM_CLOSE 发布到主窗口),我建议您不要使用它,因为当您调用 TerminateProcess 时,加载的 DLL 不会正确卸载,因此使用的资源可能不会被释放。
真正的问题是如何从名称获取进程 ID,这通常涉及
EnumProcesses()
枚举进程模块()
GetModuleFileNameEx()
GetModuleBaseName()
并将生成的基本模块名称与您要查找的名称进行比较。但在系统上执行的模块名称可能有多个实例。在这种情况下,您将如何区分不同的实例?
If by kill you mean terminate with extreme prejudice,theres's always TerminateProcess. I'd advise against using it if you can find another way (such as posting WM_CLOSE to the main window), because loaded DLLs don't get unloaded properly when you call TerminateProcess, so used resources might not get released.
The real problem is how to get from a name to a process ID, this normally involves
EnumProcesses()
EnumProcessModules()
GetModuleFileNameEx()
GetModuleBaseName()
and comparing the resulting base module name against what you're looking for. But there may be more than one instance of a module name executing on a system. How would you differentiate between instances in this circumstance?
http://en.wikipedia.org/wiki/Killall (请注意,这仅适用于 Linux ,因为您没有指定您的操作系统)
http://en.wikipedia.org/wiki/Killall (note that this only applies on Linux, as you haven't specified your OS)
假设您的意思是在 Windows 上,请使用 ZwQuerySystemInformation 和 TerminateProcess< /a>.有关详细示例,请参阅此处:如何终止给定名称的进程
Assuming you mean on Windows, use ZwQuerySystemInformation and TerminateProcess. See here for a detailed sample: How to kill a process given a name