본문 바로가기
Work/Java

[Java] ProcessBuilder을 이용해 서버 명령 수행

ProcessBuilder는 수행시킬 커멘트를  List, String 두가지 타입으로 파라미터를 받는

OS Process 수행을 위해 수행시킬 Cmd, 경로설정, 환경설정을 할수있는 클래스입니다.

수행시 Process 객체를 통해, 수행인스턴스가 관리되며, Input, Output, Error String에 대한 반환 받을 수 있습니다.

// ProcessBuilder에 넣어줄 커맨드 준비
List<String> cmd = new ArrayList<String>();
cmd.add("/bin/bash");
cmd.add("-c");
cmd.add("/pythonCode/test.py");

StringBuilder sb = new StringBuilder(1024);
String s = null;
ProcessBuilder prsbld = null;
Process prs = null;

try {      
	prsbld = new ProcessBuilder(cmd);
	// prsbld.directory(new File("/pythonCode")); // 디렉토리 이동
	// System.out.println("command: " + prsbld.command()); 	// 커맨드 확인	
    
 	// 프로세스 수행시작
	prs = prsbld.start();
    	
    BufferedReader stdError = new BufferedReader(new InputStreamReader(prs.getErrorStream()));
    while ((s = stdError.readLine()) != null)
	{
		sb.append(s);
	}
	prs.getErrorStream().close();
	prs.getInputStream().close();
	prs.getOutputStream().close();
	
	// 종료까지 대기
	prs.waitFor();
       
}catch (Exception e1) { 
}
finally
{
	if(prs != null) 
	try { 
		prs.destroy(); 
	} catch(Exception e2) {
	}
	
}

 

위와 같이, 두 클래스를 이용하여 자바가 수행되는 서버환경 내,

OS Process를 수행시키고 흐름을 제어할 수 있다.

Process prs = ProcessBuilder.start();

prs.waitFor();

prs.destroy();

핵심 메소드를 기억하고 사용하자.