通过清理杀死子进程

Kill child process with cleanup

本文关键字:子进程      更新时间:2023-10-16

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

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

MSDN 上的 CreateProcess

MSDN 上的进程信息

选项 1:

此进程信息包含在 hProcess 成员中启动的进程的句柄。

可以存储此句柄并使用它来终止子进程。

插入您可能想发送WM_CLOSE和/或WM_QUIT?要"干净"地结束该过程:

这是一篇关于如何执行知识库文章 KB 如何干净地杀死 win32 进程

**

末端插入件**

选项 2:

以下是有关如何正确终止进程树的讨论: 在窗口上终止进程树

没有简单的Win32 API可以解决这种事情。操作系统并不关心程序的源代码是用什么语言编写的,编译的程序在它看来只是一系列CPU指令加上数据。

最干净的方法是在进程之间建立某种通信通道(例如通过共享内存)并简单地请求进程终止。

您可以通过启动子进程作为调试进程,然后使用调试 API 更改子进程的行为来实现相同的目的,但这太侵入性,并且不是很容易实现。