Nowoczesne API procesów
Sprawdzaj i zarządzaj procesami systemu operacyjnego za pomocą ProcessHandle.
Porównanie kodu
✕ 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ć.
Dlaczego nowoczesne podejście wygrywa
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
Wsparcie JDK
Nowoczesne API procesów
Dostępne
Szeroko dostępne od JDK 9 (wrzesień 2017)
Jak to działa
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.
Powiązana dokumentacja
Dowód