Process — 네이티브 프로세스의 제어

Process — 네이티브 프로세스의 제어

ProcessProcessBuilder.startRuntime.exec로 시작된 네이티브 프로세스(native process)를 제어하는 추상 클래스예요. 프로세스로부터 입력을 받고, 프로세스에 출력을 보내고, 완료를 기다리고, 종료 상태를 확인하고, 프로세스를 파괴(종료)하는 메서드들을 제공해요.

출처: Java API Reference

본문

ProcessBuilder.start()Runtime.exec 메서드는 네이티브 프로세스를 만들고, 그 프로세스를 제어하고 정보를 얻는 데 쓸 수 있는 Process의 하위 클래스 인스턴스를 반환해요.

프로세스를 만드는 메서드들은 특정 네이티브 플랫폼의 특수 프로세스(예: 네이티브 윈도잉 프로세스, 데몬 프로세스, Microsoft Windows의 Win16/DOS 프로세스, 셸 스크립트)에 대해 잘 동작하지 않을 수 있어요.

기본적으로 생성된 프로세스는 자체 터미널이나 콘솔을 갖지 않아요. 표준 I/O(즉 stdin·stdout·stderr)의 모든 연산은 부모 프로세스로 리다이렉트되어, getOutputStream()·getInputStream()·getErrorStream() 메서드로 얻는 스트림을 통해 접근할 수 있어요. 문자·줄 단위 I/O 스트림은 outputWriter()·inputReader()·errorReader() 계열 메서드로 읽고 쓸 수 있어요.

부모 프로세스는 이 스트림들을 사용해 프로세스에 입력을 공급하고 출력을 얻어요. 일부 네이티브 플랫폼은 표준 입력·출력 스트림에 제한된 버퍼 크기만 제공하므로, 프로세스의 입력 스트림을 제때 쓰지 않거나 출력 스트림을 제때 읽지 않으면 프로세스가 블로킹되거나 교착 상태(deadlock)에 빠질 수 있어요.

상속 구조는 다음과 같아요.

java.lang.Object
  java.lang.Process

추상 클래스이고 자바 1.0부터 제공돼요.

주요 메서드

  • OutputStream getOutputStream() — 프로세스의 표준 입력에 접근하는 출력 스트림을 반환해요.
  • InputStream getInputStream() — 프로세스의 표준 출력에 접근하는 입력 스트림을 반환해요.
  • InputStream getErrorStream() — 프로세스의 표준 오류에 접근하는 입력 스트림을 반환해요.
  • int waitFor() throws InterruptedException — 프로세스가 완료될 때까지 기다려요.
  • boolean waitFor(long timeout, TimeUnit unit) — 프로세스가 완료될 때까지, 주어진 시간만큼 기다려요.
  • int exitValue() — 프로세스의 종료 값을 반환해요 (아직 종료되지 않았으면 IllegalThreadStateException).
  • void destroy() — 프로세스를 종료해요.
  • Process destroyForcibly() — 프로세스를 강제로 종료해요.
  • long pid() — 네이티브 프로세스의 PID를 반환해요.
  • boolean isAlive() — 프로세스가 아직 살아있는지 여부를 반환해요.
  • ProcessHandle toHandle() — 이 프로세스에 대한 ProcessHandle을 반환해요.
  • CompletableFuture<Process> onExit() — 프로세스가 종료될 때 완료되는 CompletableFuture를 반환해요.

더 알아보기 (Learn more)