为什么Process.WaitForExit()有时会挂起,但会在退出的进程中调用?

时间:2016-02-03 18:11:27

标签: .net process exit

我们已经看到很少.net的Process.WaitForExit()似乎有些错误:p.WaitForExit()即使Process.Start()创建的进程退出p.WaitForExit(0)也不会返回1}}先前已返回false。

可能导致这种情况发生的原因 - Process类或WaitForExit方法是否存在已知限制?

注意,我们有一个进程转储发生这种情况,并且funcOutput没有出现在任何线程堆栈中,这表明它不是一个自我造成的死锁,因为它无法处理进程标准输出/错误。

Process p = new Process();
ProcessStartInfo si = p.StartInfo;
si.CreateNoWindow = true;
si.UseShellExecute = false;
si.FileName = filename;
si.Arguments = args;
si.RedirectStandardOutput = true;
si.RedirectStandardError = true;

object l = new object();
var funcOutput = new DataReceivedEventHandler((s, e) => {
    lock (l) {
        string val = e.Data;
        output.WriteLine(val);
    }
});
p.ErrorDataReceived += funcOutput;
p.OutputDataReceived += funcOutput;
p.Start();
p.BeginOutputReadLine();
p.BeginErrorReadLine();
if (!p.WaitForExit(0)) {

    // code that successfully kills process when passed p.Id...
    p.WaitForExit(); // hangs 4eva
}

0 个答案:

没有答案