从外部进程的stdin / stderr / stdout读取和写入的正确位置应该在超时

时间:2017-03-31 08:40:41

标签: java stream stdout stdin processbuilder

我有java应用程序,它通过流程构建器启动外部流程。

外部应用程序与休息"世界"通过stdinstdoutstderr。此过程也不应该执行超过一些超时。

代码如下所示:

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

我的问题:

  1. pb.start()process.waitFor
  2. 开始,2000 nilmsconds开始
  3. 当应用程序已经被杀死或者应该放在errorStream之前从process.destroyForcibly()读取是否正确?

1 个答案:

答案 0 :(得分:0)

  

2000毫秒开始sincepb.start()

没有

  

或从process.waitFor()

开始

  

当应用程序已经被杀死时,从errorStream读取是否正确

没有

  

或者应该放在process.destroyForcibly()之前?

是。最好在一个单独的线程。您还应该使用流程stdout。否则它会阻止。