Я хочу запустить процесс синхронно, не прибегая к асинхронному запуску.
Рассмотрим код
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
показывает, что скрипт завершен.Можно ли дождаться этого выхода?Или это довольно неблагоприятно?