2014-11-22 46 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