用清理杀死子进程

时间:2012-06-16 08:36:38

标签: c++ winapi

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

2 个答案:

答案 0 :(得分:3)

如果你在Windows上,你可能会通过CreateProcess开始你的子进程,它有一个PROCESS_INFORMATION作为最后一个参数。

CreateProcess on MSDN

Process Information on MSDN

选项1:

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

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

插入 你可能想发送WM_CLOSE和/或WM_QUIT? “干净地”结束这个过程:

以下是关于如何做{/ 3}}

的知识库文章

**结束插入**

选项2:

以下是有关如何正确终止进程树的讨论:KB how to cleanly kill win32 processes

答案 1 :(得分:2)

对于那种事情,没有简单的Win32 API。操作系统不关心程序源代码的编写语言,编译后的程序只是一系列CPU指令和数据。

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

您可以通过将子进程作为已调试的进程启动,然后使用调试API来改变子进程的行为来实现相同的目标,但这样做过于干扰且不易实现。