我将直接进入,简短且具有描述性:
C++、Windows API
我正在使用创建子进程CreateProcess
运行外部(命令行)应用程序。我已经内置了一个超时,如果到那时子进程还没有返回正常执行,我希望强制终止该子进程。
理想情况下,我希望该子进程的行为与调用时相同ExitProcess
,或者就像一个Ctrl+C
被发送到其控制台(调用ExitProcess
来自默认控制台控制处理程序)。
到目前为止我的解决方案是使用TerminateProcess
强行杀死孩子。这确实会强制子进程立即终止,但不幸的是,如果该子进程生成了自己的任何子进程,那么它们将继续运行,直到“自然”完成。
有没有办法告诉子进程调用ExitProcess
,或者强制所有孩子的孩子也终止TerminateProcess
叫做?
这些外部应用程序超出了我的控制范围,因此我无法修改它们以提供自定义解决方法。
假设不知道孙进程(名称/PID/等),这将允许我手动调用TerminateProcess
分别在孙子进程上。尽管这可以通过手动枚举所有进程、映射进程关系和跟踪所有进程来完成,但我不认为这是一个有效的解决方案,除非作为绝对的最后手段。
感谢您的时间。
您可以使用工作对象将所有进程作为一个单元终止。您通过以下方式创建作业对象创建作业对象API,并为其分配一个进程将进程分配给作业对象。作业对象中的进程创建的新进程默认属于同一个作业对象。呼唤终止作业对象将终止作业对象中的所有关联进程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)