【发布时间】:2013-03-18 16:58:06
【问题描述】:
在运行外部脚本时,我想同时或分别读取该脚本的 ErrorStream 和 OutputStream,然后进一步处理它们。因此,我为其中一个流启动了Thread。不幸的是,Process 似乎并没有将waitFor 和Thread 终止,而是在非线程流没有进一步输入之后返回。
简而言之,这就是我正在做的事情:
ProcessBuilder pb = new ProcessBuilder(script);
final Process p = pb.start();
new Thread(new Runnable() {
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
...read lines and process them...
}
}).start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
...read lines and process them...
int exitValue = p.waitFor();
p.getOutputStream().close();
return exitValue;
waitForThread有可能被终止吗?
【问题讨论】:
-
也许只使用Commons Exec - 没有用重新发明轮子。
-
如果您发布您的真实代码会很有帮助。两件事,你永远不会启动你的输入流阅读器线程;并且您不应该在进程输出流完成之前关闭它。
-
@Perception :抱歉,代码不完整,因此有缺陷。我已经在上面更正了。
标签: java multithreading process processbuilder inputstreamreader