在终止subprocess时终止所有(盛大)subprocess

我会直接跳到,简要描述:

C ++,Windows API

我使用CreateProcess创buildsubprocess来运行外部(命令行)应用程序。 我已经build立了一个超时,如果subprocess在那个时候还没有恢复正常执行,我希望强制终止这个subprocess。

理想情况下,我希望该subprocess的行为与调用ExitProcess ,或者将Ctrl+C发送到其控制台(从默认控制台控制处理程序调用ExitProcess )。

到目前为止,我的解决scheme是使用TerminateProcess强行杀死孩子。 这确实迫使孩子立即终止,但不幸的是,如果这个孩子产生了自己的孩子,他们只能跑到“自然”完成。

有没有办法告诉subprocess调用ExitProcess ,或强制所有的孩子的子也终止时, TerminateProcess被调用?

这些外部应用程序是我无法控制的,因此我无法修改它们以提供自定义的解决方法。

假设没有关于允许我个别地在grand-child进程上手动调用TerminateProcess的grand-child进程(名字/ pids / etc)的知识。 虽然这可以通过手动枚举所有进程,映射进程关系以及跟踪所有进程来完成,但我不认为这是一个有效的解决scheme,除非是绝对的最后的手段。

感谢您的时间。

Solutions Collecting From Web of "在终止subprocess时终止所有(盛大)subprocess"

您可以使用Job对象将所有进程作为一个单元来终止。 您可以通过CreateJobObject API创建一个作业对象,并使用AssignProcessToJobObject为其分配一个流程。 作业对象中由进程创建的新进程默认属于同一个作业对象。 调用TerminateJobObject将终止作业对象中的所有关联进程。