有没有办法杀死我的应用程序的子进程并执行它的清理(调用解构函数和 atexit 函数),类似于exit(exit_code)
,但在另一个进程上?
问问题
5060 次
2 回答
3
如果您在 Windows 上,您可能通过 CreateProcess 启动子进程,它的最后一个参数是 PROCESS_INFORMATION。
选项1:
此进程信息包含在 hProcess 成员中启动的进程的句柄。
您可以存储此句柄并使用它来终止您的子进程。
插入 您可能想要发送 WM_CLOSE 和/或 WM_QUIT?“干净地”结束该过程:
这是一篇关于做什么的知识库文章知识库如何干净地杀死win32进程
** 结束插入**
选项 2:
以下是关于如何正确终止进程树的讨论:Terminate a process tree on windows
于 2012-06-16T11:23:16.107 回答
2
这种事情没有简单的 Win32 API。操作系统并不关心程序的源代码是用什么语言编写的,编译后的程序在它看来只是一系列 CPU 指令和数据。
最干净的方法是在进程之间建立某种通信通道(例如通过共享内存)并简单地请求进程终止。
您可以通过将子进程作为已调试进程启动,然后使用调试 API 来更改子进程的行为来实现相同的目的,但这太侵入性并且不太容易实现。
于 2012-06-16T08:59:36.597 回答