我有一個在外部進程中運行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應該由另一個線程收集嗎?