Java 如何在不阻塞的情况下读取进程输出?
我使用Java 如何在不阻塞的情况下读取进程输出?,java,Java,我使用ProcessBuilder从Java启动子进程。子进程可能永远运行,并不时将数据写入标准输出 我想从父进程读取这些数据,并做一些其他事情 似乎我不能使用NIO选择器读取进程的inputStream,对吗 因此,我需要使用blockingread()在单独的线程上读取它。但我不能停止这个线程(直到我终止进程),因为thread.interrupt对阻塞的线程不起作用。我需要以某种方式阻止它,让这个过程保持活跃 我看到的唯一解决方案是循环: 选中InputStream.available()
ProcessBuilder
从Java启动子进程。子进程可能永远运行,并不时将数据写入标准输出
我想从父进程读取这些数据,并做一些其他事情
似乎我不能使用NIO选择器读取进程的inputStream
,对吗
因此,我需要使用blockingread()
在单独的线程上读取它。但我不能停止这个线程(直到我终止进程),因为thread.interrupt
对阻塞的线程不起作用。我需要以某种方式阻止它,让这个过程保持活跃
我看到的唯一解决方案是循环:
InputStream.read()
(如果实际有任何数据可用)Thread.sleep()
一段时间正确的解决方案是什么?我会说让线程执行阻塞读取并终止进程以终止线程。停止线程而不停止进程的用例是什么?我希望我的应用程序在子进程运行时关闭什么?我可以使用守护进程线程吗?如果您睡眠时间过长,并且子进程试图写入的内容超过管道容量,它将挂起,直到您醒来并读取;不会丢失任何数据,但减慢子进程可能有问题,也可能没有问题。您的意思是
打印将被阻止吗?