내가 외부 프로세스에 쉘 스크립트를 실행하는 스레드를 실행 중지하고 다음과 같이 나는이 외부 프로세스에서 표준 오류 및 표준 출력 스트림에서 읽을 아파치의 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();
어떤 이유로이 테스트 케이스를 실행할 때 예외가 throw되지 않습니다 (catch
블록이 실행되지 않음). finally
블록이 실행되지 않습니다. 내가 잡을 수없는 문제가 있습니까? stdout과 stderr를 다른 스레드가 수집해야합니까?