2013-07-05 2 views
1

나는 여러 번 Mac OS에서 셸 파일을 실행해야하는 프로젝트 작업을하고 있습니다. 쉘 파일은 각 실행 결과를 별도의 로그 파일에 씁니다. 프로세스 속도를 높이려면 시스템에서 사용 가능한 모든 코어를 사용해야합니다. Java에서 BuildProcess를 사용하여이 작업을 시도했습니다. 그것은 몇 초 동안 잘 작동하지만 프로세스는 몇 초 후에 멈 춥니 다. 각 프로세스는 단일 코어 시스템에서 실행될 때 약 18 시간이 걸립니다. 예를 들어, 다음을 실행하면 두 프로세스가 시작되고 약 10 초 동안 실행되지만 그 다음 오류없이 종료됩니다.ProcessBuilder를 사용한 Java의 다중 처리

ProcessBuilder pb1 = new ProcessBuilder("/bin/bash", "runFS.sh") 
Process p1 = pb1.start() 

ProcessBuilder pb2 = new ProcessBuilder("/bin/bash", "runFS.sh") 
Process p2 = pb2.start(); 

모든 도움을 주시면 감사하겠습니다.

+0

스크립트에서 사용자 입력이 필요 없다고 확신합니까? 로그 파일은 어떻습니까? 그들이 뭐라고하니? stdout/stderr를 제어하고 원하는 위치로 리디렉션 할 수 있습니까? – fge

+1

ProcessBuilder에서 생성 된 프로세스의 stdin, stdout 및 stdErr은 콘솔에 연결되어 있지 않습니다. 프로세스의 출력 (오류 메시지)을 보려면 Process # getErrorStream/getInputStream을 사용해야합니다. – Aurand

+0

프로그램의 출력이 로그 파일에 저장됩니다. 이것은 runFS.sh에서 처리되었습니다. 나는 다른 CPU 코어에서 다른 매개 변수로이 파일을 실행하기 만하면됩니다. – Arash

답변

0

예제 코드가 아무 것도없는 경우 하위 프로세스가 실행되는 동안 실제로 주 프로세스를 활성 상태로 유지하려면 p1.waitFor()p2.waitFor()이 부족합니다. 따라서 JVM이 종료되면 시작한 프로세스도 종료됩니다.

+0

waitFor()를 사용해 보았지만 runFS.sh의 여러 인스턴스를 동시에 실행하는 프로세스가 여러 개 만들지 않았습니다. 각 인스턴스를 하나씩 실행합니다. – Arash

+0

서브 프로세스가 아직 실행 중일 때 메인 프로세스를 활성 상태로 유지하는 다른 방법이 있습니까? – Arash

+0

주를 계속 유지하려면 사용자가 입력을 요청하는 중입니다. 'int tmp = new Scanner (System.in) .nextInt(); '를 사용하는 것과 비슷하지만 구조화 된 방법이 필요합니다. – Arash