Kev*_*enK 4 c++ windows parent-child
我会直接进入,简短而具有描述性:
C++,Windows API
我正在使用CreateProcess
运行外部(命令行)应用程序创建子进程.我已经内置了超时,如果子进程到那时还没有返回正常执行,我希望强制终止该子进程.
理想情况下,我希望该子进程的行为与调用它一样ExitProcess
,或者就像Ctrl+C
发送到其控制台(ExitProcess
从默认控制台控制处理程序调用)一样.
到目前为止,我的解决方案一直是TerminateProcess
强行杀死孩子.这确实迫使孩子立即终止,但不幸的是,如果那个孩子产生了自己的孩子,他们就会一直运行直到他们"自然"完成.
有没有办法告诉子进程调用ExitProcess
,或强制所有孩子的孩子在TerminateProcess
被叫时终止?
这些外部应用程序是我无法控制的,因此我无法修改它们以提供自定义解决方案.
假设不知道允许我TerminateProcess
单独手动调用grand-child进程的grand-child进程(名称/ pids/etc).虽然这可以通过手动枚举所有进程,映射进程关系和跟踪所有进程来完成,但我不认为这是一个有效的解决方案,除非作为绝对的最后手段.
感谢您的时间.
您可以使用Job对象将所有进程作为一个单元终止.您可以通过CreateJobObject API 创建一个作业对象,并使用AssignProcessToJobObject为其分配一个进程.默认情况下,作业对象中的进程创建的新进程属于同一作业对象.调用TerminateJobObject将终止作业对象中的所有关联进程.