处理StdOut的内容

时间:2017-06-09 23:04:35

标签: c# ubuntu .net-core

我正在编写一个管理进程和处理故障转移的应用程序。该程序是用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();

有没有更好的方法来实现这一目标?感谢您的想法或意见。

1 个答案:

答案 0 :(得分:1)

我使用3个程序在.NET Core上手动运行测试:

  1. 用于跟踪 TextOutputter 程序的HTTP服务器。
  2. 一个TextOutputter程序,它打印1000个字符并每秒发出一次HTTP请求。
  3. 运行TextOutputter的一个实例的ProgramRunner。
  4. 如果没有2行,缓冲区最多可填充64k并停止。有2条线,没有停滞。