Java 9에서는 기존의 Process API가 대폭 개선되어 새로운 메서드들이 추가되었으며, 프로세스와 관련된 세부 정보를 손쉽게 조회할 수 있는 새로운 인터페이스인 ProcessHandle과 ProcessHandle.Info가 도입되었습니다.
ProcessHandle 인터페이스는 운영체제 수준의 네이티브 프로세스를 식별하고 제어할 수 있는 기능을 제공합니다. 이를 통해 각각의 프로세스에 대해 실행 여부(liveness)를 모니터링하거나, 자식 프로세스(children) 목록을 확인하고, 프로세스의 상세 정보를 조회하며, 필요한 경우 해당 프로세스를 강제 종료(destroy)하는 작업까지 수행할 수 있습니다. 한편 ProcessHandle.Info 인터페이스는 특정 프로세스에 대한 정보의 스냅샷(snapshot)을 제공합니다.
문법(Syntax)
ProcessHandle.Info info()
info() 메서드는 호출 시점의 프로세스 정보를 담은 ProcessHandle.Info 객체를 반환합니다. 참고로 Info 인터페이스의 대부분의 필드(사용자, 시작 시간, 명령어 등)는 값이 존재하지 않을 수 있기 때문에 Optional 타입으로 정의되어 있으므로, 값을 꺼낼 때는 get() 또는 orElse() 등을 사용해야 합니다.
예제(Example)
public class ProcessSnapShotTest {
public static void main(String[] args) {
ProcessHandle currentProcessHandleImpl = ProcessHandle.current();
// 현재 실행 중인 프로세스의 스냅샷을 ProcessHandle.Info로 가져옵니다:
ProcessHandle.Info processInfo = currentProcessHandleImpl.info();
System.out.println("n현재 실행 중인 프로세스의 정보 스냅샷:");
System.out.println("사용자(User) : " + processInfo.user().get());
System.out.println("시작 시간(Start Time) : " + processInfo.startInstant().get());
}
}출력 결과(Output)
현재 실행 중인 프로세스의 정보 스냅샷: 사용자(User) : Tutorialspoint\User 시작 시간(Start Time) : 2020-05-01T05:44:41.458Z
위 예제에서 ProcessHandle.current()는 현재 실행 중인 자바 프로세스의 핸들을 반환하며, info()를 통해 해당 프로세스를 실행한 사용자 계정과 프로세스 시작 시각 같은 핵심 정보를 확인할 수 있습니다. 이처럼 Java 9의 개선된 Process API를 활용하면 외부 라이브러리 없이도 운영체제의 프로세스 정보를 표준 방식으로 손쉽게 다룰 수 있습니다.