1

有没有办法杀死我的应用程序的子进程并执行它的清理(调用解构函数和 atexit 函数),类似于exit(exit_code),但在另一个进程上?

4

2 回答 2

3

如果您在 Windows 上,您可能通过 CreateProcess 启动子进程,它的最后一个参数是 PROCESS_INFORMATION。

MSDN 上的 CreateProcess

MSDN 上的进程信息

选项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 回答