Как запустить процесс в Java синхронно? - PullRequest
0 голосов
/ 02 июня 2019

Я хочу запустить процесс синхронно, не прибегая к асинхронному запуску.

Рассмотрим код

ProcessBuilder pb = new ProcessBuilder(COMMAND);
LOGGER.info(String.join(" ", COMMAND));
pb.redirectErrorStream(true);
Process cmdProces = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(cmdProces.getInputStream()));
String line;
while ((line = reader.readLine()) != null) System.out.println("tasklist: " + line);
cmdProces.waitFor(); // (1)
LOGGER.info("Script executed ");
// Java reference to output file of COMMAND

Этот фрагмент кода находится внутри планировщика, который выполняется каждые 30 секунд.Следующее выполнение выполняется до завершения предыдущего запуска.Я проверил документацию и там написано

Подпроцесс не уничтожается, когда больше нет ссылок на объект Process, а подпроцесс продолжает выполняться асинхронно.

СейчасЯ бы сказал, что мой скрипт COMMAND все еще выполняется, но java интерпретирует его как не имеющий ссылки.Как я могу предотвратить это?Что он вынужден ждать, пока COMMAND не закончится?Вывод COMMAND показывает, что скрипт завершен.Можно ли дождаться этого выхода?Или это довольно неблагоприятно?

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