欢迎光临
专注android技术,聚焦行业精粹,我们一直在努力

Java Runtime exec 阻塞

1、问题背景

使用java的Runtime.exec执行命令时一直没有返回,去掉命令的警告日志就OK。

2、问题原因

首先看下Process类的文档说明:

从这里可以看出,Runtime.exec()创建的子进程共用父进程的流,不同平台上,父进程的stream buffer可能被打满导致子进程阻塞,从而永远无法返回。

再分析我们的代码发现,process会输出两种stream:

我们一种错误的写法是读取这两个stream的时候是顺序读取,导致getInputStream的标准输出流没读完,而 errStream就已经把stream buffer填满了,那么子进程被阻塞了。

正确的写法是这两种stream应该并行读取,那个stream有数据都会及时被读取,而不会导致stream buffer被写满。

3、标准解决方案

官方标准做法如下:

赞(1) 打赏
未经允许不得转载:花花鞋 » Java Runtime exec 阻塞
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

国内精品Android技术社区

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏