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

자바(Java) Process 클래스의 목적과 주요 메서드 완벽 정리

자바 Process 클래스란?

java.lang.ProcessObject 클래스의 하위 클래스로, Runtime 클래스의 exec() 메서드를 통해 시작된 운영체제 프로세스를 표현합니다. 생성된 Process 객체를 사용하면 해당 프로세스를 제어할 수 있으며, 입출력 스트림 확인이나 종료 상태 조회 같은 프로세스 관련 정보도 얻을 수 있습니다.

Process 클래스는 추상(abstract) 클래스이므로 직접 인스턴스화할 수 없습니다. 따라서 반드시 Runtime 객체의 exec() 메서드 또는 ProcessBuilder를 통해서만 프로세스 객체를 얻을 수 있습니다.

주요 메서드

  • destroy(): 실행 중인 프로세스를 강제로 종료합니다.
  • exitValue(): 하위 프로세스의 종료 코드를 반환합니다.
  • getErrorStream(): 프로세스의 오류 출력 스트림을 반환합니다.
  • waitFor(): 프로세스가 종료될 때까지 현재 스레드를 대기시킵니다.
  • getInputStream(): 프로세스의 입력 스트림을 반환합니다.
  • getOutputStream(): 프로세스의 출력 스트림을 반환합니다.

구문

public abstract class Process extends Object

예제

import java.util.concurrent.*;

public class ProcessTest {
    public static void main(String[] args) throws Exception {
        Runtime runtime = Runtime.getRuntime();
        System.out.println("메모장 애플리케이션을 실행합니다.");
        Process process = runtime.exec("Notepad.exe"); // 메모장 애플리케이션 실행
        System.out.println("5초간 대기합니다.");
        process.waitFor(5, TimeUnit.SECONDS);
        System.out.println("메모장 애플리케이션을 종료합니다.");

        process.destroy(); // 애플리케이션 종료
    }
}

위 프로그램에서는 Process 클래스를 활용해 외부 애플리케이션을 제어합니다. Runtime 클래스의 exec("Notepad.exe") 메서드를 호출하면 메모장 애플리케이션이 실행되며, waitFor(5, TimeUnit.SECONDS) 메서드로 5초간 대기한 뒤 destroy() 메서드를 호출해 애플리케이션을 종료합니다.

실행 결과

메모장 애플리케이션을 실행합니다.
5초간 대기합니다.
메모장 애플리케이션을 종료합니다.

참고: ProcessBuilder

Java 5부터는 Runtime.exec()보다 유연한 ProcessBuilder 클래스가 제공됩니다. 환경 변수 설정, 작업 디렉터리 지정, 입출력 리디렉션 등 세밀한 제어가 필요하다면 ProcessBuilder 사용을 권장합니다.