2015-08-27 3 views
1

Как запустить несколько команд в строгой последовательности (используя ProcessBuilder или Runtime.exec - что самое простое)?Java запускает несколько команд строго последовательно

Пример:

Process process1 = Runtime.getRuntime().exec("myFirstCommand"); 
process1.waitFor(); 
Runtime.getRuntime().exec("mySecondCommand"); 

работает отлично, однако, я хочу назвать Runtime.exec/ProcessBuilder.start() только раз и возвращение сразу. Так что в основном это должно работать так, как если бы я назвал пакетный файл, содержащий эти две команды из инструмента командной строки (чего я не могу сделать, потому что эти две команды генерируются динамически). mySecondCommand не должен быть запущен до завершения myFirstCommand!

Любые идеи?

+0

_Некоторые из ваших строк в примере 1 запускают две команды. Вы читали документацию по этим вопросам? –

+0

Да, и это работает в моем коде –

+0

Документация противоречит вам. Он может «работать» в вашем коде, только если «myFirstCommand» оказался такой программой, которая использует свой аргумент как имя запускаемой программы. –

ответ

0

, если вы хотите, чтобы запустить вторую команду, только если первая команда в случае успеха, вы можете сделать что-то вроде

if (process1.exitValue() == 0) { 
    Runtime.getRuntime().exec("mySecondCommand"); 
} 
+0

Проблема для решения - это вызывающий поток, когда процессы выполняются в фоновом режиме один за другим. –

0

Вы сказали, что «он должен работать, как если бы я назвал пакетный файл, содержащий эти две команды из инструмент командной строки ". Так что именно так работало для меня:

String command = "someComand someParam"; 
command+= "\nsomeOtherCommand someOtherParam"; 
String commandname=Utilities.getRandomNameOfLengthLowerCase(10) + ".sh"; 
command+= "\nrm " + pathToContent + commandname; 
Utilities.writeFile(command, pathToContent + commandname); 
Process actProcess = Runtime.getRuntime().exec("chmod 777 " + pathToContent + commandname); 
actProcess.waitFor(); 
actProcess = Runtime.getRuntime().exec(pathToContent + commandname); 
Смежные вопросы