2013-07-25 2 views
1

Как вызвать файл sh в linux-терминале с помощью Runtime.getRuntime().exec в java?Как вызвать файл sh в linux-терминале с помощью Runtime.getRuntime(). Exec в java

Я хочу вызвать файл sh в новом терминале из кода Java. Если я запускаю его только в терминале, он запускается как отдельный процесс, который не будет закрыт, даже если мои программы завершатся. И поэтому я не использую ProcessBuilder, который останавливает процесс, вызванный им, если программа, использующая его, завершает работу.

+0

Возможный дубликат [Runtime.getRunTime(). Exec не ведет себя как C-язык "system()" command) (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- а-Java-программа) –

ответ

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. Внешнего скрипт использует команду Linux nohup(1) создать отдельностоящий процесс внутреннего сценария. Например: `поЬир Xterm -e/бен/Баш "script.sh &"

nohup сокращает связи между новым терминалом и X процесса Java. & отправляет все это на задний план, поэтому команда не доходит до xterm.