首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正确使用ProcessBuilder

正确使用ProcessBuilder
EN

Stack Overflow用户
提问于 2010-06-16 15:04:03
回答 1查看 3.4K关注 0票数 3

在研究之后,我注意到使用java的ProcessBuilder的“正确”方法是生成另外两个线程来管理新创建的进程的stdout/stderr,这样它就不会挂起,如下所示:javaworld文章

但这让我想知道两个问题--一个。)为什么需要单独的进程,而不是让父进程抢占stdout,然后依次使用stderr呢?

2.)此外,如果要将流重定向到stdout,那么只让父进程吞下stdout流,而不必担心死锁是否可以接受?

EN

回答 1

Stack Overflow用户

发布于 2010-06-16 15:18:44

注意你的条件。线程不是进程

  1. 因为子节点可以同时写入,所以当stderr的缓冲区已满时,您就会遇到死锁(子等待父进程读取stderr,父等待子节点关闭stdout)。
  2. 不是的。如果子进程也需要stdin,则必须在主线程中处理stdin,并通过额外的线程读取合并的输出流,否则可能再次出现死锁(子进程等待父进程读取输出流,父进程等待子进程读取stdin上的数据)。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3054531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档