Concurrency Средний

Инспектирование и управление процессами ОС с помощью ProcessHandle.

✕ Java 8
Process p = Runtime.getRuntime()
    .exec("ls -la");
int code = p.waitFor();
// no way to get PID
// no easy process info
✓ Java 9+
ProcessHandle ph =
    ProcessHandle.current();
long pid = ph.pid();
ph.info().command()
    .ifPresent(IO::println);
ph.children().forEach(
    c -> IO.println(c.pid()));
Заметили проблему в этом коде? Сообщите нам.
🔍

Полная информация

Доступ к PID, команде, аргументам, времени запуска, загрузке CPU.

🌳

Дерево процессов

Навигация между родительскими, дочерними и дочерними процессами.

📊

Мониторинг

onExit() возвращает CompletableFuture для асинхронного мониторинга.

Старый подход
Runtime.exec()
Современный подход
ProcessHandle
Начиная с JDK
9
Сложность
Средний
Современный API процессов
Доступно

Широко доступно с JDK 9 (сент. 2017)

ProcessHandle предоставляет PID, информацию о процессе (команда, аргументы, время запуска, загрузка CPU), отношения родитель-потомок и завершение процесса. Больше не нужны недокументированные внутренности Process.