Veiller à la fin d'une application lancée par Runtime.exec quand tomcat est tué
-
22-09-2019 - |
Question
I lancer plusieurs processus externe via un appel à
Runtime.getRuntime.exec("java myApp");
Je surveille le bon lancement et l'exécution de l'application avec quelques java.concurent.Future. Je peux dire si l'application est lancée, par erreur, arrêté. Je peux l'arrêter.
Mais, quand je tue l'application principale (celui qui lance les autres) les différents processus des applications les enfants gardent runnning et je perds le contrôle sur eux.
Je cherche un moyen de faire en sorte que lorsque l'application mère est arrêtée / tué / erreur, tous les processus enfants sont tués aussi.
Ce que je l'ai déjà fait:
La principale application fonctionne en tomcat, donc j'écouter de la destruction du contexte, et de tuer tous les sous-processus. Mais il ne suffit pas. Quand tomcat est arrêté ou tué, il ne fonctionne pas
La solution
Qu'est-ce que vous pouvez faire est - faire vos applications ouvrir une connexion au tomcat (sur localhost: port) dans certains intervalles, et si elle est pas là - System.exit(0)
. Par exemple:
try {
new URL("http://localhost:8080").openConnection().getContent();
} catch (IOException ex) {
// do app finalizations
System.exit(0);
}