Можно ли заставить JVM завершить запущенный процесс при его выходе? - PullRequest
1 голос
/ 01 февраля 2012

Я только что понял, что все процессы, которые я запускаю, не умирают при выходе из JVM.Есть ли способ для меня закрыть Process с выходами JVM, вроде File.deleteOnExit()?

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Вы должны вызывать метод .waitFor() для каждого Process перед выходом.

Если вы не можете контролировать этот процесс так хорошо, как хотели бы, вы можете использовать Runtime.addShutdownHook():

final Process process = startNewProcess();
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
    @Override
    public void run() {
        process.waitFor();
    }
}));

Я действительно не рекомендую последнее решение, если это возможно. Если у JVM нет возможности очистить себя, процесс все равно будет запущен, если он будет принудительно убит.

0 голосов
/ 01 февраля 2012

Вы можете сохранить список всех запущенных процессов, а затем использовать Process.destroy (), чтобы закрыть их внутри ловушки отключения, как упоминалось в Platinum Azure.

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

Метод destroy принудительно завершает процесс, возможно, повреждая все, что он делает, поэтому вам следует позаботиться об его использовании..

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

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