ProcessHandle — 네이티브 프로세스 식별·제어 인터페이스
ProcessHandle — 네이티브 프로세스 식별·제어 인터페이스
ProcessHandle은 네이티브 프로세스를 식별하고 제어해요. 각 개별 프로세스는 생존 여부를 모니터링하고, 자식 프로세스를 나열하고, 프로세스 정보를 얻거나 프로세스를 종료(destroy)할 수 있어요. 반면 Process 인스턴스는 현재 프로세스가 시작한 것이며, 추가로 프로세스의 입력·출력·오류 스트림에 접근할 수 있어요. 네이티브 프로세스 ID는 운영 체제가 프로세스에 할당하는 식별 번호예요. 프로세스의 상태 정보는 네이티브 시스템에서 조회되며 비동기적으로 바뀔 수 있어요. ProcessHandle 사용 시 기본 프로세스의 생존성이나 정체성에 대해 가정하지 않는 것이 좋아요. 각 ProcessHandle은 네이티브 시스템의 프로세스를 식별하고 제어할 수 있게 해 줘요. 팩토리 메서드 current(), of(long), children(), descendants(), parent(), allProcesses()가 ProcessHandle을 반환해요.
본문
long pid() — 프로세스의 네이티브 프로세스 ID를 반환해요.
static Optional<ProcessHandle> of(long pid) — 존재하는 네이티브 프로세스에 대한 Optional<ProcessHandle>을 반환해요. 해당 PID의 프로세스가 없으면 빈 Optional을 반환해요.
static ProcessHandle current() — 현재 프로세스에 대한 ProcessHandle을 반환해요. 이 핸들로 현재 프로세스를 종료할 수는 없으며, 종료하려면 System.exit을 사용해요.
Optional<ProcessHandle> parent() — 부모 프로세스에 대한 핸들을 반환해요. 좀비 상태의 프로세스는 보통 부모가 없어요.
Stream<ProcessHandle> children() — 프로세스의 현재 직접 자식 프로세스들의 스냅샷을 반환해요. 살아있지 않은 프로세스는 보통 자식이 없어요.
Stream<ProcessHandle> descendants() — 프로세스의 모든 후손(자식 + 자식의 후손을 재귀적으로) 스냅샷을 반환해요.
static Stream<ProcessHandle> allProcesses() — 현재 프로세스에 보이는 모든 프로세스의 스냅샷을 반환해요.
ProcessHandle.Info info() — 프로세스에 대한 정보의 스냅샷을 반환해요. Info 인스턴스는 프로세스 정보를 반환하는 접근자 메서드를 가져요.
CompletableFuture<ProcessHandle> onExit() — 프로세스 종료를 위한 CompletableFuture<ProcessHandle>을 반환해요. 이 퓨처는 프로세스가 종료되면 완료돼요.
boolean supportsNormalTermination() — destroy() 구현이 프로세스를 정상적으로 종료하면 true, 강제로 즉시 종료하면 false를 반환해요.
boolean destroy() — 프로세스가 종료되도록 요청해요. 정상 종료 여부는 구현에 따라 달라져요.
boolean destroyForcibly() — 프로세스를 강제로 종료하도록 요청해요. 구현에 따라 정상 종료가 실패하면 강제 종료를 시도하기도 해요.
boolean isAlive() — 이 ProcessHandle이 나타내는 프로세스가 살아있는지 테스트해요. PID가 유효한 동안 프로세스는 살아있는 것으로 간주돼요.
int hashCode() — 이 ProcessHandle의 해시 코드를 반환해요. pid() 값의 함수예요.
boolean equals(Object other) — 다른 객체가 null이 아니고, 같은 구현이며, 같은 시스템 프로세스를 나타내면 true를 반환해요.
int compareTo(ProcessHandle other) — 이 핸들과 지정된 핸들의 순서를 비교해요. 순서는 지정되지 않지만 Object.equals와 일관돼요.