English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 기본 튜토리얼

Java 프로세스 제어

Java 배열

Java 대상 지향적(I)

Java 대상 지향적(II)

Java 대상 지향적(III)

Java 예외 처리

Java 목록(List)

Java Queue(큐)

Java Map 셋

Java Set 셋

Java 입력/출력(I/O)

Java Reader/Writer

Java 다른 주제

Java 9 개선된 프로세스 API

Java 9 새로운 기능

Java에서 9 그전에는 Process API가 로컬 프로세스를 사용하는 기본 지원이 부족했었으며, 예를 들어 프로세스의 PID와 소유자, 프로세스가 시작한 시간, 프로세스가 사용한 CPU 시간, 얼마나 많은 로컬 프로세스가 실행 중인지 등이 그 중에 들어 있습니다.

Java 9 Process API에 ProcessHandle 인터페이스를 추가하여 java.lang.Process 클래스의 기능을 강화했습니다.

ProcessHandle 인터페이스의 예제는 로컬 프로세스를 식별하고 프로세스 상태를 확인하고 관리할 수 있는 로컬 프로세스를 나타냅니다.

ProcessHandle 인터페이스 내부에 Info 내장 인터페이스를 사용하여 개발자가 로컬 프로세스의 PID를 얻기 위해 종종 로컬 코드를 사용해야 하는 어려움을 피할 수 있습니다.

인터페이스에서 메서드 구현을 제공할 수 없습니다. 추상 메서드와 비추상 메서드(메서드와 구현)의 조합을 제공하려면 추상 클래스를 사용해야 합니다。

ProcessHandle 인터페이스에서 선언된 onExit() 메서드는 특정 프로세스가 종료될 때 특정 작업을 트리거할 수 있습니다。

import java.time.ZoneId;
import java.util.stream.Stream;
import java.util.stream.Collectors;
import java.io.IOException;
 
public class Tester {
   public static void main(String[] args) throws IOException {
      ProcessBuilder pb = new ProcessBuilder("notepad.exe");
      String np = "Not Present";
      Process p = pb.start();
      ProcessHandle.Info info = p.info();
      System.out.printf("프로세스 ID: %n", p.pid());
      System.out.printf("명령 이름: %n", info.command().orElse(np));
      System.out.printf("명령 줄: %n", info.commandLine().orElse(np));
 
      System.out.printf("시작 시간: %n"
         info.startInstant().map(i -> i.atZone(ZoneId.systemDefault())
         .toLocalDateTime().toString()).orElse(np));
 
      System.out.printf("인수: %s%n",
         info.arguments().map(a -> Stream.of(a).collect(
         Collectors.joining(" "))).orElse(np));
 
      System.out.printf("사용자: %s%n", info.user().orElse(np));
   } 
}

위의 예제 실행 출력 결과는 다음과 같습니다:

프로세스 ID: 5800
명령 이름: C:\Windows\System32\notepad.exe
명령 줄: 미존재
시작 시간: 2017-11-04T21:35:03.626
인수: 미존재
사용자: 관리자

Java 9 새로운 기능