【发布时间】:2016-01-25 11:26:39
【问题描述】:
我有一个生成多个子“工作进程”的 .NET 应用程序。我正在使用 Windows 作业对象 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 的句柄?
【问题讨论】:
标签: windows winapi process wmi win32-process