【问题标题】:Problem redirecting both Standard Error and Standard Input when launching process启动进程时重定向标准错误和标准输入的问题
【发布时间】:2011-08-22 02:20:49
【问题描述】:

我有一些启动 java 进程的 c# 代码。在一台运行 Windows 7 的机器上,它运行良好。在另一个正在运行的 XP 上它没有。这是代码...

mServerProcess = new Process();
mServerProcess.StartInfo.FileName = "java";
mServerProcess.StartInfo.Arguments = "-jar my.jar";
mServerProcess.StartInfo.WorkingDirectory = "C:\\my_server";
mServerProcess.StartInfo.UseShellExecute = false;
mServerProcess.StartInfo.CreateNoWindow = true;
mServerProcess.StartInfo.RedirectStandardOutput = true;
mServerProcess.StartInfo.RedirectStandardError = true;
mServerProcess.StartInfo.RedirectStandardInput = true;
mServerProcess.OutputDataReceived += new DataReceivedEventHandler(ServerOutputHandler);
mServerProcess.ErrorDataReceived += new DataReceivedEventHandler(ServerErrorHandler);
mServerProcess.SynchronizingObject = this.console;

// Start the process.
mServerProcess.Start();

// Start the asynchronous read of the sort output stream.
mServerProcess.BeginOutputReadLine();
mServerProcess.BeginErrorReadLine();

在 XP 机器上,我从来没有收到来自进程标准错误的文本,而且整个进程似乎被破坏了。我无法从标准输入流中发送任何内容。

现在...有趣的是,如果我注释掉重定向标准输入的代码,我会得到标准错误。但当然,我也需要重定向标准输入。

以前有人见过吗?...重定向标准输入和标准错误会导致问题吗?

再一次...我的 Windows 7 机器上没有这个问题。

谢谢, 嗡嗡声

更新:

我正在使用 java Logger 类从我的 java 应用程序中输出信息。我认为这个问题与 Java 以及它的 ConsoleHandler 类如何处理标准错误有关。这让我发疯了!

【问题讨论】:

    标签: c# java .net process io


    【解决方案1】:

    进程可能正在等待一些输入。

    试着给它一些输入。

    【讨论】:

    • +1 - 是的 - "如果我注释掉重定向标准输入的代码..." 是一个死的放弃:-)
    【解决方案2】:

    如果同时重定向输入和输出,则可能会导致 I/O 死锁。根据缓冲的不同,这可能在不同的操作系统或不同的输入和输出上表现不同。例如,当输入为 1k 时,它可能看起来工作正常,但在输入 4k 时会挂起。查看文档并搜索死锁:

    【讨论】:

    • 我已经翻遍了那个页面。我看不出我的方法有什么问题。我没有在流上使用任何阻塞读取调用。我正在使用异步调用。
    【解决方案3】:

    您是否正在调用使用 Jline 的 Java 进程?如果是这样,那么您需要使用以下参数调用它:

    -Djline.terminal=jline.UnsupportedTerminal
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 2012-03-30
      • 2022-12-14
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 2018-02-02
      相关资源
      最近更新 更多