**问题:**我想从Sping Boot 项目中的Web服务执行java jar文件,并想监视它。
**问题:**我可以执行此进程,但问题是该进程未进一步处理。
我想知道为什么这个过程是等待和为什么它没有处理。我如何可以监视它的进展。
在以下条件下处理:
1.一旦我停止了 Boot 项目或tomcat。
1.如果我移除process.waitFor();
,则会行程它
我尝试了this的解决方案,即从另一个线程执行进程。
我的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";
}
2条答案
按热度按时间pbgvytdp1#
通常,进程等待它的输出被调用进程使用。有时这仅仅意味着输出在终端上显示,但在这种情况下,你可能需要读取输入流,直到它阻塞。如果你不知道进程应该如何运行,你可能只想读取进程。getInputStream()。也有可能您的进程正在等待将某些内容写入进程。getOutputStream()在某些状态下。
您需要检查jar的文档,或者直接从命令提示符/shell执行它,看看它的行为如何,然后您可以更改应用程序,使其按照您期望的行为读取输出。
在许多应用程序中,最容易逐行读取输出:
dfty9e192#
请找到一个详细的理由,说明为什么在某些情况下,对
process.waitFor()
的调用根本不会返回here。或者,看看是否可以使用
waitFor()
方法的替代版本,其中我们提供了timeOut值。