Frage an java – Warum sollte die Verwendung von Runtime.exec () in Java vermieden werden?

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

Ich möchte einen Shell-Befehl in Linux OS von Java ausführen. Laut pmd reports wird Java Runtime.exec () jedoch nicht verwendet. Warum? Was ist der Grund ? Gibt es eine Alternative für Runtime.exec ()?

Welche Meldung zeigt pmd genau an? Tudor
Was ist der Grund, warum Sie die Ausführung der Runtime.exec () -Methode vermeiden sollten? . Ist dies eine Injektion möglich? kannanrbk
Problembeschreibung: Verwenden Sie Runtime.exec () nicht zum Ausführen von Befehlen kannanrbk
Dies ist eine absurde Aussage, die absolut keinen Rückhalt hat ControlAltDel

Deine Antwort

1   die antwort
36

java.lang.ProcessBuilder erleichtert das Angeben eines Prozesses, das Einrichten seiner Umgebung, das Erzeugen und das Behandeln seiner Dateideskriptoren erheblich.

Diese Klasse wird zum Erstellen von Betriebssystemprozessen verwendet.

JederProcessBuilder Instanz verwaltet eine Sammlung von Prozessattributen. Dasstart() Methode erstellt eine neueProcess Instanz mit diesen Attributen. Dasstart() Die Methode kann wiederholt von derselben Instanz aus aufgerufen werden, um neue Unterprozesse mit identischen oder verwandten Attributen zu erstellen.

...

Das Starten eines neuen Prozesses unter Verwendung des Standardarbeitsverzeichnisses und der Standardumgebung ist einfach:

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

Hier ist ein Beispiel, das einen Prozess mit einem geänderten Arbeitsverzeichnis und einer geänderten Umgebung startet:

 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();
Danke Mike. Der ProcessBuilder hat in meinem Fall hervorragend funktioniert. Viel einfacher als mit Runtime.exec (). Mehr Infos und Beispiel unterdocs.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html tremendows

Verwandte Fragen