我们已经看到很少.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
}