我有java应用程序,它通过流程构建器启动外部流程。
外部应用程序与休息"世界"通过stdin
,stdout
,stderr
。此过程也不应该执行超过一些超时。
代码如下所示:
ProcessBuilder pb = new ProcessBuilder(parameters);
Process process = pb.start();
OutputStream processOutputStream = process.getOutputStream();
IOUtils.write(inputJson, processOutputStream); // write data to external process
processOutputStream.close(); we don't need pass more arguments
InputStream errorStream = process.getErrorStream();
boolean responseWithinTimeout = process.waitFor(2000, TimeUnit.MILLISECONDS); //app should work not longer than 2 sec
if (process.isAlive()) {
process.destroyForcibly();
}
String stringFromErrorStream = IOUtils.toString(errorStream, "UTF-8"); //read from external application error stream
我的问题:
pb.start()
或process.waitFor
errorStream
之前从process.destroyForcibly()
读取是否正确?答案 0 :(得分:0)
2000毫秒开始
sincepb.start()
没有
或从
开始process.waitFor()
是
当应用程序已经被杀死时,从
errorStream
读取是否正确
没有
或者应该放在
process.destroyForcibly()
之前?
是。最好在一个单独的线程。您还应该使用流程stdout
。否则它会阻止。