我通过调用
启动了几个外部流程Runtime.getRuntime.exec("java myApp");
我用一些java.concurent.Future监视应用程序的正确启动和执行。 我可以判断应用程序是否已启动,错误地停止了。我可以阻止它。
但是,当我杀死主应用程序(启动其他应用程序的那个)时,子应用程序的几个进程继续运行并且我失去对它们的控制。
我正在寻找一种方法来确保当母应用程序被停止/被杀/错误时,所有子进程都会被杀死。
我已经做过的事情:
主应用程序在tomcat中运行,所以我监听上下文的破坏,并杀死所有子进程。但这还不够:当tomcat停止或被杀时,它无效。
答案 0 :(得分:1)
您可以做的是 - 让您的应用程序在某些时间间隔内打开与tomcat(在localhost:端口上)的连接,如果不存在,则System.exit(0)
。例如:
try {
new URL("http://localhost:8080").openConnection().getContent();
} catch (IOException ex) {
// do app finalizations
System.exit(0);
}