2013-07-25 2 views
1

java 터미널에서 Runtime.getRuntime().exec을 사용하여 sh 파일을 호출하는 방법은 무엇입니까?Runtime.getRuntime()을 사용하여 Linux 터미널에서 sh 파일을 호출하는 방법

java 코드에서 새 터미널에서 sh 파일을 호출하려고합니다. 터미널에서 실행하면 별도의 프로세스로 실행되며 프로그램이 종료 되더라도 종료되지 않습니다. 그리고 그 이유는 내가 ProcessBuilder을 사용하지 않기 때문입니다.이 프로그램을 사용하는 프로그램이 종료되면 프로세스가 중지됩니다.

+0

[Runtime.getRunTime(). exec 가능한 중복 C 언어 "system()"명령처럼 작동하지 않습니다. (http://stackoverflow.com/questions/7665185/runtime-getruntime-exec-not-behaving-like -c-language-system-command) – jtahlborn

+0

당신이해야 할 일은 터미널 에뮬레이터를 실행하여 스크립트를 매개 변수로 전달하는 것입니다. 어떤 터미널 에뮬레이터를 사용합니까? Xterm, gnome-terminal, konsole, ...? – Joni

+1

가능한 복제본 [Java 프로그램에서 완전히 독립적 인 프로세스를 시작하려면 어떻게합니까?] (http://stackoverflow.com/questions/931536/how-do-i-launch-a-completely-independent-process-from- a-java-program) –

답변

0

스크립트가 실행 파일 (chmod +x script.sh)로 표시된 경우 exec("./script.sh")으로 호출 할 수 있습니다. 그렇지 않으면 exec("sh script.sh")을 사용하여 직접 전화 할 수 있습니다.

0

사용 :

Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "sh myfile.sh" }); 
0

ProcessBuilder부터 당신이 원하는 것을 할 수 없습니다 직접 사용 Runtime 주변 단지 얇은 래퍼입니다.

대신 터미널 창을 백그라운드 프로세스로 생성하고이 프로세스를 분리하는 두 번째 스크립트를 작성해야합니다. 일반 방식 :

  1. ProcessBuilder는 외부 스크립트를
  2. 외부 스크립트를 시작하려면 내부 스크립트에 대한 분리 된 프로세스를 생성하기 위해 리눅스 명령 nohup(1)를 사용합니다. 예를 들어`nohup을의 xterm -e/빈/bash는 "script.sh &"

nohup는 새로운 X 단자와 Java 프로세스 사이의 연결을 잘라냅니다. &은 전체를 백그라운드로 보내므로 xterm이 종료 될 때까지 명령이 수행되지 않습니다.