使用Java中的流程构建器生成多个流程

时间:2012-07-22 22:59:16

标签: java shell processbuilder

我正在开发一个Web应用程序,其中我使用Java作为我的前端,shell作为我的后端。我在shell中处理大量文件...例如,如果我必须处理100个文件。我打算从Java应用程序中生成4个子进程。我读到了关于process Builder的内容。但是我没有清楚地知道如何使用start()方法生成多个进程,然后等待所有进程直到完成并再次继续处理。任何改变这一点的想法对我来说都非常有用。谢谢。

1 个答案:

答案 0 :(得分:2)

一般来说,start会代表您致电Runtime.exec(...)

一旦运行(关闭它自己的小进程),您就可以通过进程输入和输出流与它进行交互。

在我自己的工作中,我监控输入和错误流。我这样做是通过为每个流生成一个新线程并通过stream.read()方法监视吞吐量并查找返回结果-1来确定流完成的时间。

我使用第三个“监视器”线程,用于提供“waitFor”功能并帮助清理流线程。

我建议至少在单独的线程中读取输入和错误流,因为这样可以监视进程而不会阻塞当前的线程上下文。

如果要等待进程退出,则应使用Process.waitFor()(通过ProcessBuilder.start()方法返回进程)。这将等待进程退出。此方法将返回流程的退出代码,该代码可用于响应流程可能要告诉您的错误。

好的,简而言之......

ProcessBuilder pb = new ProcessBuilder(new String[] {cmd, parameter1, parameter2, ...});
Process process = pb.start();

InputStream is = process.getInputStream();
InputStream isErr process.getErrorStream();

// Spawn some threads to process the streams

int exitValue = process.waitFor();

if (exitValue == 0) {

    System.out.println("All is good with the world");

} else {

    // Handle error     

}