kill进程和close进程有什么区别?

use*_*944 61 c# process

当我开始一个流程并希望关闭这个流程时,Process.Close()和之间有什么区别Process.Kill()

我问,因为我有一个应用程序,它开始使用Wireshark通过命令行使用命令来捕获数据包Windows = hidden.因此,当我想停止捕获时,我会终止进程.因此有时捕获会打开,并显示错误,即最后一个数据包在中间被切断,所以我想知道可以使用close()之前kill()会解决这个问题吗?

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

Cod*_*ter 65

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

手册非常清楚:

Process.Close():

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

Process.Kill():

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

Process.CloseMainWindow:

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


至于你的编辑:

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

使用WinPcap APIPcap.Net库,而不是Wireshark.


Dav*_*fer 15

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

Close在.NET中关闭进程的句柄,但实际上并没有触及进程本身.Close也被称为Dispose.请参阅Jon Skeet的回答.

第三种选择是CloseMainWindow,这正常通过询问主窗口关闭关闭程序.这类似于右键单击任务栏上的程序并选择"关闭".


Fls*_*Zen 6

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

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

杀死会终止这个过程.这是终止没有用户界面的进程的唯一方法.

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