2016-06-29 1 views
1

5 분 이상 처리하는 hava 명령 줄. ProcessBuilder를 사용하여 명령 줄을 호출하면 명령이 5 분 안에 작업을 완료합니다.5 분이 지나면 java의 processBuilder가 중단되는 이유는 무엇입니까?

프로세스가 5 분 이상 걸리면 프로세스가 중단되고 프로세스를 종료 할 때까지 프로세스가 개선되지 않습니다.

p = new ProcessBuilder("myprogram","with","parameter").start(); 
p.waitFor(); 

위의 질문을 이해할 수 없다면 알려주십시오.

+0

@Matej Kormuth의 답변이 옳습니다. 프로세스와 관련된 표준 파일 설명자를 처리해야합니다. 이 문제를 해결하는 가장 쉬운 방법은 Java 7 이상을 사용하고 있다고 가정 할 때 (처음에는)'p = new ProcessBuilder ("myprogram", "with", "parameter") inheritIO(). –

답변

2

"myprogram"명령이 일부 출력을 생성하고 읽지 못하는 것일 수 있습니다. 즉, 버퍼가 가득 차면 프로세스가 차단되고 프로세스가 계속 읽기를 기다립니다. 프로세스는 차례로 다른 프로세스가 완료 될 때까지 기다립니다 (프로세스를 기다리기 때문에 종료되지 않습니다 ...). 이것은 고전적인 교착 상태입니다.

프로세스 입력 스트림에서 지속적으로 읽어야 스트림이 차단되지 않도록해야합니다.

Javadoc과는 말한다 :

클래스 프로세스

일부 네이티브 플랫폼은, 표준 입력 및 출력 스트림을 위해 신속하게 입력 스트림을 작성하거나의 출력 스트림을 읽을 실패를 제한 버퍼 크기를 제공하기 때문에 하위 프로세스가 하위 프로세스를 차단하고 심지어 교착 상태가 될 수도 있습니다.

프로세스에서 입력 스트림의 버퍼 (어떤 파이프가 하위 프로세스 스트림 스트림)를 지우지 못하면 하위 프로세스가 차단 될 수 있습니다.

관련 문제