杀菌过程和封闭过程有什么区别?

当我启动一个进程并想要关闭这个进程时,Process.Close()Process.Kill()之间有什么区别?

我这样问是因为我有一个应用程序,它通过 Windows = hidden的命令行使用 Wireshark 来开始捕获数据包。 所以当我想停止捕捉的时候,我会终止这个过程。因此,有时捕获打开与错误,最后一个数据包被削减在中间,所以我想知道是否可以使用 close()之前 kill()将解决这个问题?

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

73847 次浏览

Kill要求 系统突然终止进程(通过调用 Windows终止进程系统调用)。这类似于任务管理器中的结束进程。

中关闭进程的句柄。NET,但实际上并不触及进程本身。Close也被 Dispose调用。参见 Jon Skeet 的 这个答案

第三个选项是 CloseMainWindow,通过请求主窗口关闭,是的优雅地关闭了程序。这类似于右键单击任务栏上的程序并选择 Close。

Kill 调用 TerminateProcess。

过程。关门不是你想的那样!它只是释放类实例使用的资源。请读这个: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.close.aspx

Process.Close()process.Kill()有什么不同?

手册上写得很清楚:

Process.Close() :

Close 方法使进程停止等待退出(如果它在等待的话) ,关闭进程句柄,并清除特定于进程的属性。Close 不会关闭标准输出、输入以及错误读取器和写入器,以防它们被外部引用。[即进程本身继续运行,你只是不能再使用你的 Process实例来控制它]

Process.Kill() :

Kill 强制终止进程,而 CloseMainWindow 只请求终止进程。[ ... ]通过调用 CloseMainWindow 退出进程的请求不会强制应用程序退出。应用程序可以在退出前请求用户验证,也可以拒绝退出。若要强制应用程序退出,请使用 Kill 方法。CloseMainWindow 的行为与用户使用系统菜单关闭应用程序主窗口的行为相同。因此,通过关闭主窗口退出进程的请求不会强制应用程序立即退出。

Process.CloseMainWindow :

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


至于你的编辑:

我这样问是因为我有一个应用程序,它开始使用 wiresharkwith 命令通过命令行使用 Windows = hide 来捕获数据包。

使用 WinPcap API Pcap. Net 图书馆,而不是 Wireshark。

杀死和关闭不是两个选择。如果要终止进程,则必须调用 Kill (或 CloseMainWindow)。调用 Close 只会释放资源,但不会关闭文本数据流。自己关闭流可能会导致进程结束,也可能不会,这取决于进程。最好的策略是根据进程的类型调用 Kill 或 CloseMainWindow,然后释放 Process 对象。

Close 开始关闭 Process 对象。由 Dispose 调用。 Close 通常用于管理 Process 对象的资源。

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

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

让我来演示一下当您调用 关闭()和杀死()时会发生什么。以下操作将打开记事本,但在 myProcess 结束时不退出记事本。Close ()执行。

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

下面将打开记事本。10秒后,当 myProcess.Kill ()执行时,记事本将在结束时关闭。

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