问题:我想在spring项目中从webservice执行java文件。想要监视它。
问题:,我能够执行这个过程,但问题是该进程没有进一步处理。
我想知道为什么这个过程在等待,为什么它不被处理。我怎样才能监控它的进展。
在以下条件下对其进行处理:
process.waitFor();,它就会被处理我尝试了这的解决方案,即从另一个线程执行进程。
我的web服务调用
@RequestMapping(value="/startAnalysis", method=RequestMethod.POST)
public String startAnalysis() {
List<String> cmd = new ArrayList<>();
cmd.add("java");
cmd.add("-jar");
cmd.add("test.jar");
try {
//Process p = Runtime.getRuntime().exec(cmd.toArray(new String[0]));
//ProcMon procMon = new ProcMon(cmd);
//Thread t = new Thread(procMon);
//t.setName("procMon");
//t.start();
ProcessBuilder processBuilder = new ProcessBuilder(cmd);
Process process = processBuilder.start();
process.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}发布于 2017-10-30 16:26:40
通常,该进程等待调用进程使用它的输出。有时,这只是意味着输出会显示在终端上,但在这种情况下,您可能需要读取输入流,直到它阻塞为止。如果您不知道进程应该如何运行,您可能只想在一个单独的线程中读取process.getInputStream()。在某些状态下,您的进程也可能在等待将某些东西写入process.getOutputStream()。
要么您需要检查jar的文档,要么直接从命令提示符/shell执行它,并查看它的行为。然后,您可以将应用程序更改为读取输出,就像您期望的那样。
在许多应用程序中,输出最容易逐行读取:
final String EXPECTED_OUTPUT = "Hello World";
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String firstLine = reader.readLine();
if (!firstLine.equals(EXPECTED_OUTPUT)) {
// handle unexpected situation
}
// maybe handle some more output
// or send something to the process.getOutputStream() in response
// and finally wait for the application to exit when it should be done
process.waitFor();https://stackoverflow.com/questions/46957466
复制相似问题