Pregunta sobre java – ¿Por qué debería evitar usar Runtime.exec () en java?

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

Quiero ejecutar un comando de shell en Linux OS desde Java. Pero los informes de pmd dicen que no uses java Runtime.exec (). ¿Por qué? Cual es la razon ? ¿Hay alguna alternativa para Runtime.exec ()?

Esta es una afirmación absurda, sin ningún respaldo. ControlAltDel
¿Cuál es la razón para evitar ejecutar el método Runtime.exec ()? . ¿Es esto posible alguna inyección? kannanrbk
¿Qué mensaje está mostrando PMD exactamente? Tudor
Descripción del problema: no utilice Runtime.exec () para ejecutar comandos kannanrbk

Tu respuesta

1   la respuesta
36

A menos que estés atrapado en una antigua JVM,java.lang.ProcessBuilder hace que sea mucho más fácil especificar un proceso, configurar su entorno, generarlo y manejar sus descriptores de archivo.

Esta clase se utiliza para crear procesos del sistema operativo.

CadaProcessBuilder instancia gestiona una colección de atributos de proceso. losstart() método crea un nuevoProcess instancia con esos atributos. losstart() El método se puede invocar repetidamente desde la misma instancia para crear nuevos subprocesos con atributos idénticos o relacionados.

...

Comenzar un nuevo proceso que utiliza el directorio y el entorno de trabajo predeterminados es fácil:

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

Este es un ejemplo que inicia un proceso con un directorio y entorno de trabajo modificado:

 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();
Gracias mike El ProcessBuilder funcionó excelente en mi caso. Mucho más fácil que con Runtime.exec (). Más información y ejemplo endocs.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html tremendows

Preguntas relacionadas