我正在编写一个管理进程和处理故障转移的应用程序。该程序是用C#for .NET Core编写的,可以在Ubuntu Server 16.04 x64上运行。
我有这个代码来创建进程并使用退出事件和
来跟踪它们ProcessStartInfo psi = new ProcessStartInfo
{
WorkingDirectory = "/home/xyzserver/someprocess",
FileName = "mono",
Arguments = "someprocess.exe",
RedirectStandardOutput = true
};
_proc = Process.Start(psi);
_proc.EnableRaisingEvents = true;
_proc.Exited += ProcOnExited;
我从文档here了解到,如果Console.WriteLine
信息流已满,则_proc.StandardOutput
的来电将会阻止。我想防止这种行为并处理托管应用程序的所有输出,因为它也会自己写入物理日志。
此外,我想避免将任何输出存储在任何未使用的流缓冲区中,因为它们永远不会被使用。首选解决方案不会UseShellExecute
。
我考虑过添加这两行,希望所有收到的数据都会被处理,但我不确定是否正确。
_proc.OutputDataReceived += (sender, eventArgs) => {};
_proc.BeginOutputReadLine();
有没有更好的方法来实现这一目标?感谢您的想法或意见。
答案 0 :(得分:1)
我使用3个程序在.NET Core上手动运行测试:
如果没有2行,缓冲区最多可填充64k并停止。有2条线,没有停滞。