我在Visual Studio 2008中有一个C ++项目,在执行时会产生另一个进程(由于正在使用的GUI库)。但是,当我退出主进程(使用Ctrl-C或停止调试器)时,生成的进程(以及GUI)仍然存在。这是所使用的库的副作用,以及项目的性质 - 它被设计为嵌入式,因此从未真正“退出”,但调试和测试是基于Windows的。然后孤儿进程阻止我再次运行软件,而不会先杀死它。
使用Process Explorer我可以看到生成的进程是正在调试的进程的子进程。我想要一种方法,当我结束项目调试时,杀死所有子进程。
Chromium项目有一个宏grab child processes以便附加到它们。这被设计为与VS GUI中的按钮相关联,并且似乎是特定于chrome的(即,对于不同的项目/父进程,您将需要不同的按钮)。
我已经研究过使用DebuggerProcessEvents::OnProcessStateChanged
宏,这个想法是当调试器停止时,我可以使用与Chromium宏类似的想法来处理子进程,并且< evil voice>杀死它们< / evil语音> ...但这个事件似乎永远不会被触发。
有什么想法?该项目是基于Makefile的,因为代码是在Visual Studio之外生成的,所以我将限制我可以按项目设置的选项。