我有一个在外部进程中运行shell脚本中的线程和我使用的Apache的IOUtils从这个外部进程的标准错误和标准输出流如下:线程停止执行
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应该由另一个线程收集吗?