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

Java 9 ProcessHandle 인터페이스 완벽 가이드: 프로세스 관리의 핵심 기능과 사용법

Java 9 ProcessHandle 인터페이스란?

Java 9에서 새롭게 도입된 ProcessHandle 인터페이스는 운영체제의 네이티브 프로세스와 상호작용할 수 있게 해주는 강력한 기능입니다. 이 인터페이스를 활용하면 프로세스 관련 작업을 수행하고 상태를 확인할 수 있으며, 프로세스 ID(pid), 시작 시간, 누적 CPU 사용 시간, 인수(arguments), 명령어(command), 사용자(user), 부모 프로세스, 자식 프로세스(descendants) 등의 정보를 손쉽게 조회할 수 있습니다.

ProcessHandle이 제공하는 주요 기능

  • 프로세스에 대한 상세 정보를 담고 있는 ProcessHandle.Info 객체 반환
  • 프로세스의 PID 조회
  • 프로세스의 실행 생존 여부 확인
  • 직계 자식 프로세스의 스냅샷 조회
  • 모든 후손(하위) 프로세스의 스냅샷 조회
  • 현재 실행 중인 모든 프로세스의 스냅샷 조회
  • 프로세스 강제 종료 지원
  • 프로세스가 종료되는 시점에 ProcessHandle을 전달받는 CompletableFuture 반환

ProcessHandle.Info가 담고 있는 정보

ProcessHandle.Info는 특정 시점의 프로세스 스냅샷 정보를 저장하며, 다음과 같은 항목들을 포함합니다.

  • 프로세스의 명령어(Command)
  • 프로세스의 인수(Arguments)
  • 프로세스의 전체 명령줄(Command-line)
  • 프로세스의 시작 시간
  • 프로세스가 사용한 CPU 시간
  • 프로세스를 실행한 사용자

ProcessHandle 사용 예제

아래 예제에서는 pid() 메서드를 사용해 현재 프로세스 핸들의 PID를 출력하고, isAlive() 메서드로 해당 프로세스가 현재 실행 중인지 확인하는 방법을 살펴봅니다.

예제 코드

import java.util.Optional;

public class ProcessHandleTest {
    public static void main(String args[]) {
        long pid = ProcessHandle.current().pid();

        ProcessHandle currentProcess = ProcessHandle.current();
        System.out.println("PID: " + currentProcess.pid());

        Optional<ProcessHandle> processHandle = ProcessHandle.of(pid);
        boolean isAlive = processHandle.isPresent() && processHandle.get().isAlive();
        System.out.println(isAlive);
    }
}

실행 결과

PID: 6484
true

이처럼 ProcessHandle 인터페이스는 기존의 Process API보다 훨씬 세밀한 프로세스 제어와 모니터링 기능을 제공합니다. 프로세스 상태 추적, 비동기 종료 처리, 하위 프로세스 탐색 등이 필요한 애플리케이션을 개발할 때 매우 유용하게 활용할 수 있습니다.