我有一个.NET应用程序,它会生成多个子“工作进程”。我正在使用Windows Job对象API和JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE设置,以确保在父进程终止时始终杀死子进程。
然而,我观察到在父进程关闭后,机器上仍有许多孤立的进程在运行。使用Process Explorer,我可以看到它们仍然正确地分配给了Job,并且Job已经配置了正确的“Kill on Job Close”设置。
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE的文档说明如下: “当关闭与作业关联的最后一个句柄时,导致所有与作业相关的进程终止。”
这似乎意味着某个地方仍然打开了对Job的句柄...我搜索了我的Job对象的句柄,并在结果中发现了WmiPrvSE.exe的实例。如果我杀死相关的WmiPrvSE.exe进程,则显然关闭了对Job的未处理句柄,并且所有孤立的应用程序进程都得到了预期的终止。
为什么WmiPrvSE.exe会有一个对我的Job的句柄?
然而,我观察到在父进程关闭后,机器上仍有许多孤立的进程在运行。使用Process Explorer,我可以看到它们仍然正确地分配给了Job,并且Job已经配置了正确的“Kill on Job Close”设置。
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE的文档说明如下: “当关闭与作业关联的最后一个句柄时,导致所有与作业相关的进程终止。”
这似乎意味着某个地方仍然打开了对Job的句柄...我搜索了我的Job对象的句柄,并在结果中发现了WmiPrvSE.exe的实例。如果我杀死相关的WmiPrvSE.exe进程,则显然关闭了对Job的未处理句柄,并且所有孤立的应用程序进程都得到了预期的终止。
为什么WmiPrvSE.exe会有一个对我的Job的句柄?