Concurrency Średniozaawansowany

Sprawdzaj i zarządzaj procesami systemu operacyjnego za pomocą 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()));
Widzisz problem z tym kodem? Daj nam znać.
🔍

Pełne informacje

Dostęp do PID, polecenia, argumentów, czasu startu, użycia CPU.

🌳

Drzewo procesów

Nawiguj po rodzicu, dzieciach i potomkach.

📊

Monitorowanie

onExit() zwraca CompletableFuture do asynchronicznego monitorowania.

Stare podejście
Runtime.exec()
Nowoczesne podejście
ProcessHandle
Od JDK
9
Poziom trudności
Średniozaawansowany
Nowoczesne API procesów
Dostępne

Szeroko dostępne od JDK 9 (wrzesień 2017)

ProcessHandle udostępnia PID-y, informacje o procesie (polecenie, argumenty, czas startu, użycie CPU), relacje rodzic-dziecko oraz usuwanie procesów. Koniec z nieudokumentowanymi elementami wewnętrznymi Process.