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

13
   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 ()?

Описание проблемы: не используйте Runtime.exec () для выполнения команд kannanrbk
По какой причине следует избегать выполнения метода Runtime.exec ()? , Это какая-то инъекция возможна? kannanrbk
Какое сообщение показывает pmd? Tudor
Это абсурдное утверждение, абсолютно без поддержки ControlAltDel

Ваш Ответ

1   ответ
36

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

This class is used to create operating system processes.

Each ProcessBuilder instance manages a collection of process attributes. The start() method creates a new Process instance with those attributes. The start() method can be invoked repeatedly from the same instance to create new subprocesses with identical or related attributes.

...

Starting a new process which uses the default working directory and environment is easy:

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

Here is an example that starts a process with a modified working directory and environment:

 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();
Спасибо майк ProcessBuilder работал отлично в моем случае. Гораздо проще, чем с Runtime.exec (). Больше информации и пример наdocs.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html

Похожие вопросы