5

Job Objects 上的MSDN 页面解释说:

一个进程只能与一个作业相关联。作业不能嵌套。Windows 8 Consumer Preview 和 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因某种原因终止,它们会删除它们下面的所有进程。不幸的是,我不能在这里使用作业对象,因为作业对象不嵌套。

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

4

1 回答 1

0

我认为人们误解了Windows 8 将支持的新功能Nested Jobs是什么。

如果您使用启动进程server.exe启动进程launcherA.exe启动进程subProcessA.exe等等,您只需要开始server.exe工作即可。这样一来,所有其他孩子(launcherA.exesubProcessA.exe在与他的父母相同的工作中自动启动。因此,您可以一次监控所有进程集合。例如,您甚至可以在每次启动新进程时收到通知,以创建详细的日志文件。我在一些应用程序上做了这个,效果很好。

您可以收到的唯一问题是子 exe 中的一些是否也“足够现代”并使用乔布斯来控制他的孩子。只有在您必须使用新的嵌套作业的情况下。

如果我理解正确您的问题,您当前的问题可以通过server.exe只安排一份新工作来简单地解决。

于 2012-04-26T15:32:45.953 回答