자바 Process 클래스란?
java.lang.Process는 Object 클래스의 하위 클래스로, 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 사용을 권장합니다.