Гарантируйте завершение Приложения, запущенного Runtime.exec, когда Tomcat убит - PullRequest
2 голосов
/ 22 февраля 2010

Я запускаю несколько внешних процессов через звонок на

Runtime.getRuntime.exec("java myApp");

Я наблюдаю за правильным запуском и выполнением приложения с помощью некоторого java.concurent.Future. Я могу сказать, если приложение запущено, по ошибке остановлено. Я могу это остановить.

Но когда я убиваю основное приложение (которое запускает остальные), несколько процессов дочерних приложений продолжают работать, и я теряю контроль над ними.

Я искал способ гарантировать, что при остановке / уничтожении / ошибке материнского приложения все дочерние процессы также будут уничтожены.

Что я уже сделал:

Основное приложение выполняется в tomcat, поэтому я слушаю уничтожение контекста и уничтожаю все подпроцессы. Но этого мало: когда кота останавливают или убивают, он не работает.

1 Ответ

1 голос
/ 22 февраля 2010

Что вы можете сделать - заставить свои приложения открывать соединение с tomcat (через локальный хост: порт) через определенные промежутки времени, а если его там нет - System.exit(0). Например:

try {
    new URL("http://localhost:8080").openConnection().getContent();
} catch (IOException ex) {
    // do app finalizations
    System.exit(0);
}
...