Pytanie w sprawie java – Dlaczego warto unikać używania Runtime.exec () w java?

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

Chcę wykonać polecenie powłoki w linux os z java. Ale raporty pmd mówią, że nie używaj java Runtime.exec (). Czemu? Jaki jest powód ? Czy istnieje jakaś alternatywa dla Runtime.exec ()?

Opis problemu: Nie używaj Runtime.exec () do wykonywania poleceń kannanrbk
Jaka wiadomość pokazuje dokładnie PMD? Tudor
To absurdalne stwierdzenie, bez żadnego wsparcia ControlAltDel
Jaki jest powód, dla którego należy unikać wykonywania metody Runtime.exec ()? . Czy to możliwe jest jakikolwiek zastrzyk? kannanrbk

Twoja odpowiedź

1   odpowiedź
36

Chyba że utkniesz na starożytnym JVM,java.lang.ProcessBuilder znacznie ułatwia określenie procesu, skonfigurowanie jego środowiska, odrodzenie go i obsługę deskryptorów plików.

Ta klasa służy do tworzenia procesów systemu operacyjnego.

KażdyProcessBuilder instancja zarządza zbiorem atrybutów procesu. Thestart() metoda tworzy nowąProcess przykład z tymi atrybutami. Thestart() Metoda może być wywoływana wielokrotnie z tej samej instancji, aby utworzyć nowe podprocesy o identycznych lub powiązanych atrybutach.

...

Rozpoczęcie nowego procesu, który używa domyślnego katalogu roboczego i środowiska, jest łatwe:

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

Oto przykład, który rozpoczyna proces ze zmodyfikowanym katalogiem roboczym i środowiskiem:

 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();
Dzięki Mike. ProcessBuilder działał doskonale w moim przypadku. Znacznie łatwiej niż w Runtime.exec (). Więcej informacji i przykład nadocs.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html tremendows

Powiązane pytania