Запустите сценарий оболочки в фоновом режиме из Java-программы - PullRequest
3 голосов
/ 13 сентября 2011

В настоящее время я запускаю сценарий оболочки из Java с помощью кода, похожего на этот:

ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.directory("/directory/where/the/script/is/located/");
String[] command = new String[]{"sh", "myScript.sh"};
processBuilder.command(command);
Map<String, String> env = processBuilder.environment();
//tweak the environment with needed additions
env.put(...);
Process p = processBuilder.start();

stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

// read the output from the command
String line;
while ((line = stdInput.readLine()) != null)
{
  logger.fine(line);
}
p.waitFor();
int returnCode = p.exitValue();
// Return something according to the return code
return ...;

Если я теперь хочу запустить сценарий и не ждать его завершения (и, следовательно, потерять возможность возврата в соответствии с кодом возврата), но все же с возможностью предварительно настроить среду? как мне поступить?

Спасибо

1 Ответ

5 голосов
/ 13 сентября 2011

Просто сделайте все это в новом потоке.

Оберните весь приведенный выше код в Runnable и запустите для него поток.Ваш основной код может продолжать делать что-то еще.В исполняемом файле, как только вы получите результат от дочернего процесса, используйте некоторое уведомление (или шаблон наблюдателя), чтобы уведомить заинтересованные стороны.

...