杀死进程和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();