gpt4 book ai didi

c++ - 您如何在没有嵌套作业对象的情况下可靠地控制子流程的生命周期?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:51:57 26 4
gpt4 key购买 nike

MSDN page on Job Objects解释:

A process can be associated with only one job. Jobs cannot be nested. The ability to nest jobs was added in Windows 8 Consumer Preview and Windows Server 8 Beta.

不幸的是,这似乎正是我所需要的。我正在处理这样的进程树:

server.exe
|
+--+ utility.exe
|
+--+ launcherA.exe
| |
| +--+ programA.exe
| |
| +--+ subProcessA.exe
|
+--+ launcherB.exe
|
+--+ programB.exe

我尝试实现以下行为:

  1. 如果 server.exe 以某种方式终止(因为它崩溃,或者因为用户决定使用任务管理器终止它,或者仅仅因为它完成执行),它会关闭所有它下面的过程。我为此使用了一个工作对象。

  2. 如果 launcherA.exelaunchedB.exe 由于某种原因终止,它们将关闭它们下面的所有进程。不幸的是,我不能在这里使用作业对象,因为作业对象不嵌套。

实际上,我经常设法通过终止上述树中的任意进程来创建“悬空”进程。我尽量避免留下任何陈旧的进程,但到目前为止我提出的所有解决方案都依赖于某种监视其他进程的看门狗进程——但如果看门狗本身被杀死,所有希望都会破灭。

最佳答案

我认为对新功能是什么有误解Nested Jobs这将在 Windows 8 中得到支持。

如果您使用启动进程 server.exe 启动进程 launcherA.exe 启动进程 subProcessA.exe 等等你只需要在作业中启动 server.exe。按照这种方式,所有其他子项(launcherA.exesubProcessA.exe 等等)将在与他相同的作业中自动启动 parent 。因此,您可以一次监视所有进程的集合。您甚至可以在每次启动新进程时收到通知,例如创建详细的日志文件。我在一些应用程序上这样做了,效果很好。

您可能遇到的唯一问题是,如果子 exe 中的某些内容也“足够现代”,并且使用 Jobs 来控制他的 子级。只有在您必须使用新的嵌套作业的情况下。

如果我理解正确你的问题,你当前的问题可以简单地通过将 server.exe 放在一个新的工作中来解决。

关于c++ - 您如何在没有嵌套作业对象的情况下可靠地控制子流程的生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10316848/

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