본문으로 바로가기
COMMUNITY모든 이야기

자동화 스크립트의 일환으로 Java에서 외부 쉘 스크립트를 실행하고 그 출력 결과(stdout)를 읽어오려고 합니다.

코드:

import java.io.*;

public class ScriptRunner {
    public static void main(String[] args) throws IOException {
        Process process = new ProcessBuilder("sh", "-c", "while true; do echo 'logging data...'; sleep 1; done").start();
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println("Output: " + line);
        }
    }
}

오류: 프로세스가 처음 몇 줄의 출력만 내보낸 뒤, 더 이상 출력이 나오지 않고 프로그램이 멈춘 것처럼 대기 상태(Hang)가 됩니다.

시도: ProcessBuilder의 redirectErrorStream(true) 설정을 통해 표준 에러와 표준 출력을 합쳐보았으나 동일한 현상이 발생했습니다.

질문: 프로세스의 출력 버퍼가 가득 차서 발생하는 데드락 현상인지, 이를 해결하기 위해 별도의 스레드로 스트림을 소비해야 하는 것이 정석인지 궁금합니다.

모든 이야기1454

가벼운 안부부터 깊은 생각까지, 함께 나눠요.

글쓰기
총 1454개의 이야기
댓글