Как запустить и убить асинхронное перенаправление с помощью ProcessBuilder - PullRequest
0 голосов
/ 01 мая 2018

Я хочу перенаправить вывод команды в текстовый файл, и я хочу запустить команду с помощью ProcessBuilder (в Linux или Unix). Я хочу, чтобы перенаправление выполнялось асинхронно, и я хочу, чтобы процесс Java сохранял pid команды перенаправления и завершал процесс перенаправления, когда перенаправление больше не требуется.

Я вижу, что ProcessBuilder.start() возвращает Process объект, который имеет метод Proccess.pid(). Я также вижу метод Process.waitFor(), подразумевающий, что команда перенаправления по своей природе асинхронна при запуске через Process Builder.

Итак, мой вопрос: могу ли я выполнить команду перенаправления в асинхронном процессе, используя ProcessBuilder, получить PID с Process и завершить процесс перенаправления вниз по линии, пропустив Process.waitFor()? Это вполне возможно?

Спасибо

1 Ответ

0 голосов
/ 01 мая 2018

Да, класс Process имеет методы destroy() и destroyForcibly() для уничтожения запущенного процесса. Начиная с Java 9, был добавлен класс ProcessHandle, который также имеет методы с тем же именем.

Если у вас есть pid, но у вас нет объекта Process, вы можете получить ProcessHandle для запущенного процесса, учитывая его pid, используя метод ProcessHandle.of(long pid), но если вы запустили Process самим проще использовать объект Process, который был возвращен из ProcessBuilder.start(), или получить от него ProcessHandle с помощью метода Process.toHandle().

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