【发布时间】:2011-01-21 15:34:41
【问题描述】:
我将直接进入,简短且具有描述性:
C++、Windows API
我正在使用CreateProcess 创建子进程来运行外部(命令行)应用程序。我已经建立了一个超时,如果到那个时候子进程还没有恢复正常执行,我希望强制终止那个子进程。
理想情况下,我希望该子进程的行为与调用ExitProcess 一样,或者好像将Ctrl+C 发送到其控制台(从默认控制台控制处理程序调用ExitProcess) .
到目前为止,我的解决方案是使用TerminateProcess 强行杀死孩子。这确实会强制孩子立即终止,但不幸的是,如果该孩子产生了它自己的任何孩子,它们就会一直运行,直到它们“自然”完成。
有没有办法告诉子进程调用ExitProcess,或者在调用TerminateProcess 时强制子进程的所有子进程也终止?
这些外部应用程序超出了我的控制范围,因此我无法修改它们以提供自定义解决方法。
假设不知道孙子进程(名称/pids/等),这将允许我单独手动调用孙子进程上的TerminateProcess。虽然这可以通过手动枚举所有进程、映射进程关系和跟踪所有进程来完成,但我不认为这是一个有效的解决方案,除非是绝对的最后手段。
感谢您的宝贵时间。
【问题讨论】:
标签: c++ windows parent-child