2011-11-21 96 views

回答

1

這可能會有所幫助--Windows 2000引入了「作業」的概念,這是一個受控於一個單元的進程集合,非常像UNIX/LINUX中的進程組。因此,通過在工作中啓動進程,然後告訴Windows殺死作業中的所有進程,可以殺死進程及其所有子進程。

基本上創建一個新的工作,然後使用該工作來產生子進程。所有的孩子也將在新的工作中創建。超時時,只需調用作業的kill()方法,整個流程樹就會終止。您可能會檢查.NET文檔以獲取更多相關信息。我使用Perl的Win32 :: Job API來實現你正在嘗試做的事情。查看MSDN上的以下鏈接以獲取更多信息:Job API Description

1

this問題的答案顯示如何遞歸地終止進程的所有子進程。而不是殺死它,你可以等待每個子進程,直到它完成。您可以使用Process.Exited事件,如this問題中所述,這個問題看起來像是一個重複的問題。

+0

這就是WaitForExit()所做的。顯然這並不能解決湯姆森(或我)的問題。我的問題,特別是從另一個啓動窗體窗體(生成的應用程序是一次點擊 - 因此它使用.application文件調用)Process.Exited標誌立即設置。可能只要實際的表格應用程序啓動。 –

0

.net中存在一個錯誤,它會給你以後的行爲。

WaitForExit()將等待所有子進程,如果您正在異步讀取輸出。

p.StartInfo.RedirectStandardOutput = true; 
p.OutputDataReceived = new DataReceivedEventHandler(OutputHandler); 
p.BeginOutputReadLine(); 
p.BeginErrorReadLine(); 

WaitForExit(Int32.MaxValue-1)允許我們在使用異步模式時獲得正常行爲。