Joã*_*nes 6 c# asp.net iis process redirectstandardoutput
我今天遇到了这个问题,我花了很长时间才搞清楚.我从IIS中启动一个进程,重定向它的标准输出和错误输出,所以当进程退出时,我就能用它生成一个日志.我的机器上的一切运行正常,但在我发布之后不太好.
这个过程应该只运行一段时间然后退出,但事实并非如此.它只是停止响应,持有像套接字这样的资源.经过一段时间,我能够找出问题的原因:生成的日志太大了.Console.WriteLine从运行过程中评论后,一切正常.
只是为了澄清我是如何开始这个过程的:
Process process = new Process();
process.StartInfo.FileName = path;
process.StartInfo.Arguments = arguments;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.EnableRaisingEvents = true;
process.Exited += Process_Exited;
process.Start();
Run Code Online (Sandbox Code Playgroud)
以及我如何处理退出:
private static void Process_Exited(object sender, EventArgs e)
{
Process process = (Process)sender;
File.WriteAllText(path, process.StandardOutput.ReadToEnd() +
"\r\nEXCEPTIONS\r\n" + process.StandardError.ReadToEnd());
}
Run Code Online (Sandbox Code Playgroud)
即使我已经知道如何修复它,我仍然想知道发生了什么以及为什么,因为我必须有办法创建一个我想要的大日志.
RedirectStandardOutput的文档描述的不是一个,而是两个可能的死锁场景(对于一个有用且非危险的类库怎么样?!)
当StandardOutput和StandardError都被重定向时,以及正在读取的流已满时,就会出现这种情况.这似乎完美地描述了你的情况.
一个非常烦人的情况,但阅读完整的文档,他们描述了如何避免它发生.