2012-04-25 4 views
0

Runtime.exec()을 사용하여 새 프로세스를 시작하려고하지만 내 문제는 원격에서 ssh를 사용하여 Java 프로그램을 실행하는 것입니다. 코드 :리눅스에서 ssh를 사용하는 Java Runtime.exec() 문제

test = "ssh -t [email protected] java packageName.ClassName portNumber (Other command line args for this class)" 
Process proc = Runtime.getRuntime().exec(new String[] {"/bin/bash", "-c", test}); 

이 실패하거나 캐치하지만 새로 실행중인 프로세스의 표준 출력을 볼 수 있어야하고 그렇게하지 않습니다.

참고 : 명령 줄에서 ssh -t [email protected] java packageName.ClassName portNumber (Other command line args for this class)을 실행하면 정상적으로 작동합니다. ssh 키를 사용하여 암호를 요구하지 않도록 호스트 설정을했습니다.

아이디어가 있으십니까?

답변

2

생성되는 하위 프로세스의 출력을 얻으려면 Process.getInputStream을 사용해야합니다.

Runtime.exec에 대한 좋은 토론은 this article을 참조하십시오.

1

프로세스의 표준 출력에 해당하는 입력 스트림을 요청한 다음 표준 출력에 인쇄 할 수 있다고 생각합니다. 실행 후 확인해야 할 경우에는 waitFor() 메서드를 호출하여 인쇄를 시작하기 전에 완료하십시오.

5

그런 경우 런타임을 사용하는 것은 좋지 않습니다. jsch 또는 이와 비슷한 라이브러리를 사용하는 것이 좋습니다.

+0

+1 Jsch는 ssh와 sftp의 모든 것을 잘 처리합니다. – Gray

+0

더 이상 동의 할 수 없습니다. 'Runtime.exec()'를 피하십시오. 특히 순수 자바 라이브러리가 있다면 가능합니다. –

+0

+1 지금까지 jsch에 대해 전혀 알지 못했습니다. –

관련 문제