2010-06-16 4 views
3

연구 후 나는 java의 ProcessBuilder를 사용하는 "올바른"방법이 새로 생성 된 프로세스의 stdout/stderr을 관리하기 위해 두 개의 다른 스레드를 생성하여 그것이 멈추지 않는 것으로 나타났습니다 여기에 표시 : javaworld article올바른 사용법 ProcessBuilder

그러나이 약 2 질문 - 1) 정확히 별도의 프로세스 대신 부모 프로세스가 표준 출력을 중얼 후 표준 오류를 순차적 필요없이 필요한 이유 궁금 내게 남아있다?

2.) 또한 스트림을 모두 stdout으로 리디렉션하는 경우 상위 프로세스가 stdout 스트림을 삼킨 다음 교착 상태가 걱정되지 않아도됩니까?

답변

3

조건을 이해하십시오. Threads aren't processes. 아이가 모두 기록 할 수 있고 stderr에 대한 버퍼가 가득 때 교착 상태를 얻을 것 때문에

  1. 는 (아이 stderr을 읽는 부모를 기다리는 부모는 stdout를 닫 아이를 기다립니다). 자식 프로세스는 stdin을 필요로하는 경우

  2. 아니요, 당신은 아이가 출력 스트림을 읽는 부모를 기다립니다 (주 스레드에서 stdin를 처리하고 별도의 스레드를 통해 병합 된 출력 스트림을 읽거나 다시 교착 상태를 가질 수 있어야합니다 부모는 자식이 stdin에있는 데이터를 읽을 때까지 기다립니다.

관련 문제