Tooling 중급

Runtime.exec(String)에서 ProcessBuilder 인자로

명시적인 인자 목록과 ProcessBuilder 설정으로 프로세스를 실행합니다.

✕ Command string
Process process = Runtime.getRuntime()
        .exec("git show " + revision);
✓ ProcessBuilder
Process process = new ProcessBuilder(
        "git", "show", revision)
        .redirectErrorStream(true)
        .start();
이 코드에 문제가 있나요? 알려주세요.
🎯

정확한 인자

각 프로세스 인자는 명령 문자열 토큰화 없이 구분된 값으로 유지됩니다.

🎛

명시적 설정

환경, 디렉터리, 리다이렉션, 오류 처리를 함께 설정합니다.

🛡

더 안전한 경계

동적 값으로 셸과 유사한 명령 문자열을 조립하지 않습니다.

이전 방식
Runtime.exec(String)
모던 방식
ProcessBuilder
JDK 버전
5
난이도
중급
Runtime.exec(String)에서 ProcessBuilder 인자로
사용 가능

JDK 5 (2004년 9월) 이후 널리 사용 가능

Runtime.exec(String)은 자바의 명령 문자열 토큰화를 적용하므로 인자에 공백이나 따옴표가 포함되면 오해하기 쉽습니다. ProcessBuilder는 프로그램 인자를 각각 구분된 값으로 받고 작업 디렉터리, 환경 변수, 입출력 리다이렉션, 오류 스트림 정책을 명시적으로 노출합니다. 애플리케이션이 의도적으로 실행하지 않는 한 셸을 호출하지 않습니다.