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()
?
System.Diagnostics.Process
implementsIDisposable
via theComponent
class, and the protectedDispose(bool)
method callsClose()
. 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 theDispose()
method directly or via the C#using
construct as follows.Process.Kill()
andProcess.Close()
both internally callClose()
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 callClose()
on it when you are done, or wrap it in ausing
block.