有没有办法杀死我的应用程序的子进程并执行它的清理(调用解构器和atexit函数),类似于exit(exit_code)
,但在另一个进程上?
答案 0 :(得分:3)
如果你在Windows上,你可能会通过CreateProcess开始你的子进程,它有一个PROCESS_INFORMATION作为最后一个参数。
选项1:
此进程信息包含在hProcess成员中启动的进程的句柄。
您可以存储此句柄并使用它来终止您的子进程。
插入强> 你可能想发送WM_CLOSE和/或WM_QUIT? “干净地”结束这个过程:
以下是关于如何做{/ 3}}
的知识库文章**结束插入**
选项2:
以下是有关如何正确终止进程树的讨论:KB how to cleanly kill win32 processes
答案 1 :(得分:2)
对于那种事情,没有简单的Win32 API。操作系统不关心程序源代码的编写语言,编译后的程序只是一系列CPU指令和数据。
最干净的方法是在进程之间建立某种通信通道(例如通过共享内存)并简单地请求进程终止。
您可以通过将子进程作为已调试的进程启动,然后使用调试API来改变子进程的行为来实现相同的目标,但这样做过于干扰且不易实现。