【发布时间】:2016-06-28 07:56:04
【问题描述】:
我有一个在外部进程中运行 shell 脚本的线程,我正在使用 Apache 的 IOUtils 从这个外部进程中读取 stderr 和 stdout 流,如下所示:
Thread t = new Thread(()-> {
ProcessBuilder pb = new ProcessBuilder("sh");
Process p = null;
try {
p = pb.start();
OutputStream os = p.getOutputStream();
os.write("sleep 30 ; echo test".getBytes());
os.flush();
os.close();
InputStream is = p.getInputStream();
InputStream es = p.getErrorStream();
String stdout = IOUtils.toString(is,"UTF-8");
String stderr = IOUtils.toString(es,"UTF-8");
int retval = p.waitFor();
} catch (Exception e) {
System.out.println("Got exception: "+e.toString());
} finally {
System.out.println("Done now!");
}
});
t.start();
Thread.sleep(7000);
t.interrupt();
由于某种原因,当我运行这个测试用例时,从未抛出异常(catch 块永远不会运行),finally 块永远不会运行。有什么我没有解决的问题吗? stdout 和 stderr 是否应该由不同的线程收集?
【问题讨论】:
标签: java multithreading io