If I kill a System.Diagnostics.Process with .Kill(), do I also need to call .Close()?

Deadly 提交于 2019-12-21 07:13:10

问题


Using C# 4.0, I've created a System.Diagnostics.Process that I expect to take a short amount of time to run. If for some reason the process hasn't exited after some amount of time (e.g, I've called .WaitForExit(timeout) and the return value was false), I need to cleanup. I've decided that it's safe to use .Kill() in this particular situation (there are no data structures I'm worried about corrupting).

Given this setup, do I also need to call the .Close() method of the Process? If so, should I call .Close() before or after .Kill()?


回答1:


System.Diagnostics.Process implements IDisposable via the Component class, and the protected Dispose(bool) method calls Close(). It is generally considered good practice to dispose of disposable resources when you are done with them, as this will immediately release any resources associated with the class (not having to wait for the GC to run).

So to answer your question:

Yes, please call Close() by calling the Dispose() method directly or via the C# using construct as follows.

using(Process proc = CreateProcess())
{
    StartProcess(proc);
    if (!proc.WaitForExit(timeout))
    {
        proc.Kill();
    }
}



回答2:


Process.Kill() and Process.Close() both internally call Close() on the private SafeProcessHandle object associated with the process. However, Process.Close() also explicitly resets several other internal members.

Since Process implements IDisposable, you should always call Close() on it when you are done, or wrap it in a using block.



来源:https://stackoverflow.com/questions/5642967/if-i-kill-a-system-diagnostics-process-with-kill-do-i-also-need-to-call-clo

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!