Java中读取Process输出的疑问:进程提前退出时能否读取完整输出?
Java中读取Process输出的疑问:进程提前退出时能否读取完整输出?
放心哈,这种情况完全不会影响你读取完整输出,不用有这个顾虑~
你之所以会有这个疑问,可能是担心进程退出后它的输出会跟着消失,但实际上操作系统层面会帮你把这些输出好好保存着:
当你通过ProcessBuilder.start()启动子进程后,系统会为子进程的标准输出(你这里还通过redirectErrorStream(true)合并了错误输出)创建一个管道缓冲区。不管子进程运行得有多快,哪怕在你创建InputStreamReader之前就已经执行完毕退出了,它的所有输出数据都会被暂存在这个管道里,直到你的Java程序去读取。
你的代码逻辑是完全没问题的:
- 先启动进程
- 再建立读取流的通道
- 最后通过
while ((line = reader.readLine()) != null)循环读取
哪怕进程早就退出了,只要管道里还有未读取的数据,readLine()就会持续读取,直到把所有输出都读完才会返回null,结束循环。
另外补充个小知识点:就算进程已经退出,只要你还没关闭这个输入流,也没调用process.destroy(),你依然可以随时去读取它的输出内容,操作系统不会随便清空这个管道缓冲区的。
备注:内容来源于stack exchange,提问作者Calvin_Z
相关产品推荐
相关产品推荐

