Выключение порождало дочерний процесс Java изящно - PullRequest
0 голосов
/ 20 августа 2011

Я использую ProcessBuilder, чтобы порождать дочерний процесс для выполнения записи некоторых данных в файловую систему.И возникает проблема, потому что родительский процесс может неожиданно завершиться сбоем / завершиться, дочерний процесс просто зависает, даже если я использую, например, jps проверку, если его родительский процесс умирает, затем завершается.Каков правильный способ для порожденного дочернего процесса обнаружить, если его родительский процесс мертв, и затем выйти?

Кроме того, после поиска в Интернете большинство решений используют Runtime.addShutdownHook(), но это не предусмотрено в ProcessBuilder.У него есть эквивалент?

Ответы [ 2 ]

1 голос
/ 20 августа 2011

Вы провели хороший поиск по проблеме. Поэтому вы можете захотеть использовать возвращенную ссылку на экземпляр Process и метод Runtime.addShutdownHook(Thread), которые вы упомянули. Это последний шаг, который я считаю, что вам нужно сделать:


List commands = new ArrayList();
commands.add("xeyes"); // launch this command
ProcessBuilder pb = new ProcessBuilder(commands);
final Process p = pb.start();
Runtime.getRuntime().addShutdownHook(new Thread() {
  @Override
  public void run() {
    p.destroy();
  }
});

Thread.sleep(2000); // sleep for some time
0 голосов
/ 12 мая 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...