我今天遇到了这个问题,我花了很长时间才弄清楚。我从 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();
以及我如何处理它的退出:
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());
}
即使我已经知道如何修复它,我仍然想知道到底发生了什么以及为什么,因为我必须有一种方法可以创建一个我想要的日志。