Concurrency 중급

ProcessHandle로 OS 프로세스를 검사하고 관리합니다.

✕ 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년 9월) 이후 널리 사용 가능

ProcessHandle은 PID, 프로세스 정보(명령어, 인수, 시작 시간, CPU 사용률), 부모/자식 관계, 프로세스 종료 기능을 제공합니다. 더 이상 문서화되지 않은 Process 내부를 사용할 필요가 없습니다.

공유 𝕏 🦋 in