gpt4 book ai didi

c++ - 终止子进程时终止所有(孙)子进程

转载 作者:可可西里 更新时间:2023-11-01 14:07:46 28 4
gpt4 key购买 nike

我将直接切入,简短且具有描述性:

C++、Windows API

我正在使用 CreateProcess 创建子进程以运行外部(命令行)应用程序。我已经建立了超时,如果到那时子进程还没有返回正常执行,我希望强制终止该子进程。

理想情况下,我希望该子进程的行为就像它调用了 ExitProcess 一样,或者就像 Ctrl+C 被发送到它的控制台(它从默认控制台控制处理程序调用 ExitProcess

到目前为止,我的解决方案是使用 TerminateProcess 强行杀死子进程。这确实会强制 child 立即终止,但不幸的是,如果该 child 产生了自己的任何 child ,他们将继续运行,直到它们“自然”完成。

有没有办法告诉子进程调用 ExitProcess,或者在调用 TerminateProcess 时强制子进程的所有子进程也终止?

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

假设不了解孙子进程(名称/pids/等),这将允许我在孙子进程上单独手动调用 TerminateProcess。虽然这可以通过手动枚举所有进程、映射进程关系和跟踪所有进程来完成,但我认为这不是一个有效的解决方案,除非是绝对的最后手段。

感谢您的宝贵时间。

最佳答案

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

关于c++ - 终止子进程时终止所有(孙)子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2345034/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com