Concurrency Fortgeschritten

OS-Prozesse mit ProcessHandle inspizieren und verwalten.

✕ 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()));
Problem mit diesem Code entdeckt? Sag uns Bescheid.
🔍

Vollständige Informationen

Zugriff auf PID, Befehl, Argumente, Startzeit, CPU-Nutzung.

🌳

Prozessbaum

Zwischen Eltern, Kindern und Nachkommen navigieren.

📊

Überwachung

onExit() gibt ein CompletableFuture für asynchrone Überwachung zurück.

Alter Ansatz
Runtime.exec()
Moderner Ansatz
ProcessHandle
Seit JDK
9
Schwierigkeitsgrad
Fortgeschritten
Moderne Prozess-API
Verfügbar

Weitgehend verfügbar seit JDK 9 (Sept. 2017)

ProcessHandle stellt PIDs, Prozessinformationen (Befehl, Argumente, Startzeit, CPU-Nutzung), Eltern-Kind-Beziehungen und Prozessbeendigung bereit. Keine undokumentierten Process-Interna mehr.

Teilen 𝕏 🦋 in