Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9 Process API에 추가된 새로운 메소드 총정리

Java 9는 Process 클래스에 새로운 메소드들을 추가하여 기능을 크게 개선했습니다. 또한 프로세스와 관련된 모든 세부 정보를 손쉽게 조회할 수 있도록 ProcessHandle 인터페이스와 ProcessHandle.Info 인터페이스를 새롭게 제공합니다.

Java 9에서 Process 클래스에 추가된 새로운 메소드

  • boolean supportsNormalTermination(): destroy() 메소드의 구현이 프로세스를 정상적으로 종료하는 방식이라면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  • long pid(): 운영체제 수준의 네이티브 프로세스 ID(PID)를 반환합니다.
  • ProcessHandle toHandle(): 해당 Process 객체에 대한 ProcessHandle을 반환합니다.
  • Stream<ProcessHandle> children(): 프로세스의 직계 자식 프로세스들에 대한 스냅샷을 반환합니다.
  • Stream<ProcessHandle> descendants(): 프로세스의 모든 후손(자식의 자식까지 포함) 프로세스들에 대한 스냅샷을 반환합니다.
  • ProcessHandle.Info info(): 프로세스에 대한 정보(명령어, 시작 시간, 사용자 등)의 스냅샷을 반환합니다.
  • CompletableFuture<Process> onExit(): 프로세스가 종료될 때 완료되는 CompletableFuture를 반환하므로, 비동기 방식으로 종료 이벤트를 처리할 수 있습니다.

예제 코드

아래 예제는 현재 실행 중인 프로세스의 핸들을 가져오고, ProcessHandle.Info를 통해 다양한 프로세스 정보를 확인하는 방법을 보여줍니다.

public class ProcessTest {
    public static void main(String args[]) {
        ProcessHandle processHandle = ProcessHandle.current();
        ProcessHandle.Info processInfo = processHandle.info();
        System.out.println(processHandle.pid());
        System.out.println(processHandle.parent());
        System.out.println(processInfo.arguments().isPresent());
        System.out.println(processInfo.command().isPresent());
        System.out.println(processInfo.command().get().contains("tutorialspoint"));
        System.out.println(processInfo.startInstant().isPresent());
    }
}

실행 결과

4892
Optional[7788]
false
true
false
true

결과 해석

  • 4892: 현재 프로세스의 PID입니다.
  • Optional[7788]: 부모 프로세스의 PID가 Optional로 감싸져 반환됩니다.
  • false: 명령행 인수(arguments) 정보가 존재하지 않습니다.
  • true: 실행 명령어(command) 정보가 존재합니다.
  • false: 명령어 문자열에 "tutorialspoint"가 포함되어 있지 않습니다.
  • true: 프로세스 시작 시간(startInstant) 정보가 존재합니다.

이처럼 Java 9의 Process API 개선 사항을 활용하면 운영체제에 종속적인 코드 없이도 프로세스 ID 조회, 자식 프로세스 탐색, 종료 알림 처리 등을 표준화된 방식으로 수행할 수 있습니다.