我會就在跳,是簡要的描述時,終止所有(盛大)兒童:終止子進程
C++中,Windows API
我創建使用CreateProcess
運行外部子進程(命令在線)應用程序。我已經建立了超時,如果子進程在那時還沒有返回正常執行,我希望強制終止該子進程。
理想情況下,我想爲子進程充當一樣的,如果它被稱爲ExitProcess
,或者如果Ctrl+C
被送到其控制檯(從默認的控制檯控制處理程序調用ExitProcess
)。
我的解決方案到目前爲止一直使用TerminateProcess
來強制殺死孩子。這確實會迫使孩子立即終止,但不幸的是,如果該孩子產生了自己的孩子,他們將一直跑到他們的「自然」完成。
有沒有辦法告訴子進程調用ExitProcess
,或強制所有孩子的孩子也在終止時調用TerminateProcess
?
這些外部應用程序是我無法控制的,因此我無法修改它們以提供自定義的解決方法。
假設沒有關於grand-child進程(名稱/ pids/etc)的知識,這將允許我個別地在grand-child進程上手動調用TerminateProcess
。雖然這可以通過手動枚舉所有進程,映射進程關係以及跟蹤所有進程來完成,但我認爲這不是一個有效的解決方案,除非是絕對的最後手段。
謝謝你的時間。
謝謝Michael。這非常有希望,看起來好像完全解決了這個問題。現在去閱讀更多,並給它一個鏡頭!感謝您分享您的知識和經驗。 – KevenK 2010-02-26 21:58:14
作業對象不再適用於Vista。資源管理器將從快捷方式開始的程序放入作業中,阻止您對任何子進程執行相同的操作。 – 2010-02-26 22:25:58
我無法在我的Win7盒子上重現這種行爲 - 我寫了一個小程序來創建一個作業並將其添加到它。通過快捷方式由資源管理器啓動時工作正常。 – Michael 2010-02-27 00:37:57