ProcessHandle 인터페이스란?
Java 9에서 도입된 ProcessHandle 인터페이스를 사용하면 운영체제 프로세스에 대한 다양한 작업을 수행하고 상태를 확인할 수 있습니다. 이 인터페이스는 프로세스의 고유 PID, 시작 시간, CPU 사용 시간, 사용자, 부모 프로세스, 그리고 자식 프로세스(descendants) 등의 정보를 제공합니다.
특히 부모 프로세스에 접근하려면 parent() 메서드를 호출하면 되며, 반환 타입은 Optional<ProcessHandle>입니다. 만약 자식 프로세스에 부모가 없거나 부모 프로세스에 접근할 수 없는 경우에는 빈 Optional이 반환됩니다.
문법(Syntax)
Optional<ProcessHandle> parent()예제 코드
import java.io.*;
public class ParentProcessTest {
public static void main(String args[]) {
try {
Process notepadProcess = new ProcessBuilder("notepad.exe").start();
ProcessHandle parentHandle = notepadProcess.toHandle().parent().get();
System.out.println("Parent Process Native PID: " + parentHandle.pid());
} catch(IOException e) {
e.printStackTrace();
}
}
}코드 설명
- ProcessBuilder: 외부 프로그램인 메모장(notepad.exe)을 실행하는 데 사용됩니다.
- toHandle(): Process 객체를 ProcessHandle 객체로 변환합니다.
- parent(): 현재 프로세스의 부모 프로세스를 Optional<ProcessHandle> 형태로 반환합니다.
- get(): Optional 객체에서 실제 ProcessHandle 값을 꺼냅니다.
- pid(): 부모 프로세스의 고유 PID를 출력합니다.
위 예제를 실행하면 메모장 애플리케이션이 시작되며, 동시에 부모 프로세스의 고유 PID가 콘솔에 출력됩니다.
실행 결과(Output)
Parent Process Native PID : 7108