繁体   English   中英

没有WaitForExit()的using语句中的Process会发生什么?

[英]What happens to a Process in a using statement without WaitForExit()?

在下面的示例中,如果代码离开using语句后它仍在运行,那么该进程会发生什么?

using (var p = new Process())
{
    p.StartInfo.FileName = "c:\\temp\\SomeConsoleApp.exe";
    p.Start();
}

应该将系统上运行的OS进程与代表程序中“句柄”的Process对象分开:

  • 该过程将继续运行直至完成,或者您使用特定于操作系统的方法将其终止
  • Process对象被释放,因此您的程序无法再与OS进程交互。

Process对象上调用Dispose()方法不会终止OS进程。

您可能知道using statement将调用Dispose方法,因此流程实例将为Disposed。

要与流程进行交互,需要获取与流程相关的信息Handle流程 .Net框架内部保存Handle到进程并为您带来所有痛苦。 Dispose将关闭进程Handle ,因此您将无法再以良好的方式使用Process对象。

最重要的是:你开始的过程没有任何反应,它就好像没有任何反应一样。 真的什么都没发生, 你刚丢失了门的钥匙,并不意味着房间被毁坏了。

使用关闭它的过程将运行。 它不会因为进程的对象范围结束而死亡。

进程将继续运行。您可以将Process p移动到类成员并在OnStop中停止该进程,以确保如果exe变得混乱,您可以再次停止服务。

protected override void OnStop()
{
    p.Kill();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM