2014-11-22 74 views
1

我有下面的代碼:Process.Kill是否釋放諸如文件句柄之類的資源?

proc.Start(); // "proc" opens "foo.txt" and reads it. 
proc.Kill(); 
proc.WaitForExit(); 
cleanup(); // deletes "foo.txt" 

我得到一個異常,告訴我「foo.txt的」正在被另一個進程使用。唯一可能使用「foo.txt」的進程是「proc」,我已經殺死並等待其退出。

Process.Kill是否不釋放死亡進程的資源?如果是這樣,我該如何釋放死亡進程所持有的資源,以便我可以清理。

謝謝。

+0

看看,如果你調用'proc.Dispose()'立即清理之前'()'會發生什麼? – 2014-11-22 05:06:20

+0

'Process.Kill'​​什麼都不做,除了表示終止進程。當一個進程終止時,當它的句柄被關閉時。我認爲三個邊緣情況下程序可以「退出」和「WaitForExit」可以返回,但程序尚未「終止」,但仍然有一些句柄。 – 2014-11-22 05:07:01

+0

也可以在cleanup()之前嘗試GC.Collect,看看會發生什麼。 – Alexandru 2014-11-22 05:08:14

回答

-3

你可以這樣做:

do 
{ 
    //wait for process to exit 

}while (!myProcess.WaitForExit(1000)); //milliseconds to wait for exit 

cleanup(); 

還拿這裏WaitForExit MSDN