【问题标题】:C#: Process.HasExited returns false even though the process has terminatedC#:Process.HasExited 返回 false,即使进程已终止
【发布时间】:2011-02-16 07:17:18
【问题描述】:

可能是这个问题的反面:Process.HasExited returns true even though process is running?

我在一个进程上调用了 Kill(),它似乎已经退出。但是当我测试 HasExited 时,我得到了错误:

myProcess.Kill();

while ( !myProcess.HasExited )
{
    Thread.Sleep(1000);
}

而且这种情况会无限期地持续下去。当然,我必须更改此代码才能最终停止等待,但我很好奇为什么 HasExited 在进程似乎已经从地图上掉下来时仍然返回 false。

【问题讨论】:

    标签: c# process


    【解决方案1】:

    您是否正在重定向标准输出? MSDN 声明如下:

    当标准输出被重定向到异步事件处理程序时,当此属性返回 true 时,输出处理可能尚未完成。为确保异步事件处理已完成,请在检查 HasExited 之前调用不带参数的 WaitForExit() 重载。

    无论如何,建议的解决方法应该可以解决问题:

    myProcess.Kill();
    myProcess.WaitForExit();
    

    【讨论】:

    • 没错,我确实重定向了标准输出。不过,我选择将 Kill 和 WaitForExit(1000) 放在重试三次循环中。正如 MSDN 文章所建议的那样,我不能永远等待。
    • 我还想知道这是否意味着进程可能终止并且仍然打开其标准输出流。或者这篇文章是否意味着我的本地流媒体阅读器没有收到关闭消息,尽管它的源进程退出了。
    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多