2012-07-22 47 views
1

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

回答

2

一般来说,开始将代表您致电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  

} 
+0

谢谢你的帮助。现在我的问题是我有我打电话......问题是,这个shell脚本内的awk脚本当我调用shell脚本时,awk脚本没有被执行。Wat可能是这个问题... – NandaKumar 2012-07-23 00:14:29