java - 使用 Java 的进程生成器生成多个进程

标签 java shell processbuilder

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

最佳答案

一般来说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     

}

关于java - 使用 Java 的进程生成器生成多个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11604657/

相关文章:

shell - SSH - 一种无需打开单独的 SFTP session 即可传输文件的方法?

linux - 如何从shell脚本中的文件中读取用户名和密码?

ruby - 将 shell 脚本源代码放入 ruby​​ 脚本中的环境中

java - 导入文件时避免使用完整文件路径

java - 通过java检查Ldap服务器中的用户名和密码

java - 为什么我的锯齿测试音不播放?

java - 如何获取已启动进程的内存使用情况

java - 将Runtime.exec与命令中的空格一起使用时的“Cannot run program”

java - 在 Java 中创建一个 Nohup 进程

java - 在哪里放置检查图中两条边是否平行的方法?