我有一個.NET應用程序,它產生多個孩子'工作進程'。我正在使用Windows作業對象API和JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE設置來確保子進程總是在父進程終止時被終止。爲什麼WmiPrvSE.exe持有我的進程'作業對象的句柄?
但是,我已經觀察到父母關閉後仍在機器上運行的多個孤兒進程。使用Process Explorer,我可以看到它們仍然正確地分配給作業,並且作業具有配置的正確的「關閉作業關閉」設置。
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE的文檔狀態爲: 「導致與作業關聯的所有進程在作業的最後一個句柄關閉時終止。」
這似乎意味着作業的句柄仍然處於打開狀態...我搜索了Job對象的句柄,並在結果中找到了WmiPrvSE.exe的實例。如果我終止了相關的WmiPrvSE.exe進程,Job的未完成句柄顯然已關閉,並且所有孤立的應用程序進程都按預期終止。
WmiPrvSE.exe如何處理我的工作?
感謝您的幫助 - 這絕對是WmiPrvSE流程,它擁有對作業的處理(而不是另一個查詢WMI的流程)。 我已經啓用診斷日誌按上面的博客,但我也沒辦法告訴* *的時候把手就開了,這是很難的根本原因關聯到衆多的WMI事件之一。不過謝謝 - 我會繼續堅持下去。 –
另一個查詢WMI的進程可能會導致WMIPrvSE打開一個句柄。WMIPrvSE,據我的理解,WMIPrvSE不會自動行動,但由於WMI查詢。因此,即使另一個進程正在執行查詢並且沒有直接擁有該句柄,那另一個進程可能是罪魁禍首。另請參閱我對此答案的編輯。 –