Убедитесь, что программа, запущенная через Runtime.exec (), умрет вместе с приложением java - PullRequest
3 голосов
/ 11 мая 2011

в моей java-программе я вызываю внешнюю программу через Runtime.exec и вызываю Process.waitFor, чтобы дождаться ее завершения.Это какой-то длительный скрипт.Я хочу убедиться, что если что-то пойдет не так с моим java-приложением (например, если его убьют извне, что, кстати, в моем случае действительно происходит время от времени), внешний скрипт запуска тоже умрет.

Я посмотрел на Runtime.addShutdownHook, который мог бы подойти для этого, но в нем четко указано, что, например, на SIGKILL нельзя дать никаких гарантий, будет или нет запуск shutdownhook.

Есть лиЛюбой другой способ, как гарантировать, что внешняя программа, запущенная из Java, умрет вместе с вызывающим процессом Java?

Спасибо

1 Ответ

1 голос
/ 11 мая 2011

Если «Runtime.addShutdownHook» не достаточно, я думаю, что со стороны java вам не повезло.Некоторые идеи:

  1. ваш сценарий может проверить, если приложение java все еще работает и при необходимости завершает работу
  2. пусть ваше приложение java обновляет файл с отметкой времени и позволяет вашему сценарию периодически проверять, есливременная метка устарела (и завершается)
  3. Редактировать: запустить другой процесс, который отслеживает только приложение Java и сценарий и убивает сценарий, если приложение Java исчезло (конечно, если ЭТОпроцесс убит, тебе опять не повезло)
...