Подтвердить что ты не робот

Почему следует избегать использования Runtime.exec() в java?

   Process p = Runtime.getRuntime().exec(command);
   is = p.getInputStream();
   byte[] userbytes = new byte[1024];
   is.read(userbytes);

Я хочу выполнить команду оболочки в linux os из java. Но в отчетах pmd не используется java Runtime.exec(). Зачем? Какова причина? Есть ли альтернатива для Runtime.exec()?

4b9b3361

Ответ 1

Если вы не застряли на древней JVM, java.lang.ProcessBuilder упрощает определение процесса, настройку его среды, spawn он и обрабатывает дескрипторы файла.

Этот класс используется для создания процессов операционной системы.

Каждый экземпляр ProcessBuilder управляет набором атрибутов процесса. Метод start() создает новый экземпляр Process с этими атрибутами. Метод start() может быть вызван повторно из одного и того же экземпляра для создания новых подпроцессов с идентичными или связанными атрибутами.

...

Запуск нового процесса, который использует рабочий каталог и среду по умолчанию, легко:

 Process p = new ProcessBuilder("myCommand", "myArg").start();

Вот пример, который запускает процесс с измененным рабочим каталогом и средой:

 ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory(new File("myDir"));
 Process p = pb.start();