杀死进程和closures进程之间有什么区别?

当我启动一个进程并想closures这个进程时, Process.Close()Process.Kill()什么区别?

我问,因为我有一个应用程序开始捕获使用Wireshark命令通过命令行与Windows = hidden数据包。 所以当我想停止捕获我杀死进程。所以有时捕获打开一个错误,最后一个数据包被中断,所以我想知道可以使用close()之前kill()将解决这个问题?

当我开始捕捉时,我可以通过按Ctrl + Cclosures它,但在我的情况下,我打开隐藏状态的窗口,我可以通过我的代码做类似的事情吗?

Process.Close()process.Kill()之间有什么区别?

该手册非常清楚:

Process.Close()

Close方法会导致进程在等待时停止等待退出,closures进程句柄并清除进程特定的属性。 closures不会closures标准输出,input和错误读取器和写入器,以防被外部引用。 [即进程本身保持运行,你只是不能使用你的Process实例控制它]

Process.Kill()

Kill强制终止进程,而CloseMainWindow只请求终止。 […]通过调用CloseMainWindow来退出进程的请求不会强制应用程序退出。 应用程序在退出之前可以要求用户validation,否则可以拒绝退出。 要强制退出该应用程序,请使用Kill方法。 CloseMainWindow的行为与使用系统菜单closures应用程序主窗口的用户相同。 因此,通过closures主窗口退出进程的请求不会强制应用程序立即退出。

Process.CloseMainWindow

通过向其主窗口发送closures消息来closures具有用户界面的进程。


至于你的编辑:

我问,因为我有应用程序谁开始捕获包使用wireshark命令通过命令行与Windows =隐藏。

使用WinPcap API或Pcap.Net库,而不是Wireshark。

Kill请求系统毫不客气地终止进程(通过调用Windows TerminateProcess系统调用)。 这类似于任务pipe理器中的结束进程。

closuresclosures在.NET中的进程的句柄,但实际上并没有触及进程本身。 Close也被Dispose调用。 Jon Skeet看到这个答案 。

第三个选项是CloseMainWindow ,通过要求closures主窗口来正常closures程序。 这类似于右键单击任务栏上的程序并selectclosures。

杀死和closures不是两个选项。 如果要终止进程,则必须调用Kill(或CloseMainWindow)。 调用closures只会释放资源,但不会closures标准stream。 自己closuresstream可能会或可能不会导致stream程结束,这取决于stream程。 最好的策略是根据进程的types调用Kill或CloseMainWindow,然后处理Process对象。

closures开始closuresProcess对象。 它由Dispose调用。 Close通常用于pipe理Process对象的资源。

杀死终止进程。 这是终止没有用户界面的进程的唯一方法。

CloseMainWindow发送closures消息到进程的主窗口。 这是停止具有用户界面的过程的优雅方式。

Process.Kill调用TerminateProcess。

Process.Close不会做你认为的事! 它只是释放类的实例使用的资源。 请阅读此: http : //msdn.microsoft.com/en-us/library/system.diagnostics.process.close.aspx

让我来说明当你调用Close()和Kill()时发生的情况。 以下操作将打开记事本,但在执行myProcess.Close()时不会退出记事本。

 Process myProcess; myProcess = Process.Start("Notepad.exe"); Thread.Sleep(10000); myProcess.Close(); 

以下将打开记事本。 10秒钟后,当执行myProcess.Kill()时,记事本将在最后closures。

 Process myProcess; myProcess = Process.Start("Notepad.exe"); Thread.Sleep(10000); myProcess.Kill();