1

我正在开发一个 Web 应用程序,其中我使用 Java 作为我的前端和 shell 作为我的后端。我在 shell 中处理很多文件。例如,如果我必须处理 100 个文件。我计划从 Java 应用程序中生成 4 个子进程。我读到了 process Builder 。但是我不清楚如何使用 start() 方法生成多个进程,然后等待所有进程完成并再次继续处理。任何关于这方面的想法都会对我非常有用。谢谢你。

4

1 回答 1

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     

}
于 2012-07-22T23:29:23.600 回答