【问题标题】:Correct Usage of ProcessBuilderProcessBuilder的正确使用
【发布时间】:2010-06-16 15:04:03
【问题描述】:

经过研究,我注意到使用 java 的 ProcessBuilder 的“正确”方法是生成另外两个线程来管理吞噬新创建进程的 stdout/stderr,使其不会像此处所示那样挂起: javaworld article

但这让我想知道两个问题- 1.) 为什么需要单独的进程,而不是让父进程吞噬标准输出,然后依次吞噬标准错误?

2.) 此外,如果您要将两个流重定向到 stdout,是否可以让父进程吞下 stdout 流,然后不必担心死锁?

【问题讨论】:

    标签: java processbuilder


    【解决方案1】:

    注意你的条件。 Threads aren't processes.

    1. 因为子进程可以写入两者,当stderr 的缓冲区已满时,您会遇到死锁(子进程等待父进程读取stderr,父进程等待子进程关闭stdout)。

    2. 没有。如果子进程也需要stdin,那么您必须在主线程中处理stdin,并通过额外线程读取合并的输出流,否则您可能会再次出现死锁(子进程等待父进程读取输出流和父进程)等待孩子读取stdin上的数据)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多