ProcessBuilder vs. Runtime.exec(): Ein Vergleich
Bei der Ausführung externer Befehle aus Java stoßen Entwickler häufig auf ein Dilemma zwischen der Verwendung von Runtime. getRuntime().exec(...) und new ProcessBuilder(...).start(). Um die Unterschiede zwischen diesen beiden Ansätzen zu beleuchten, untersuchen wir ihr Verhalten im Detail.
Fallstudie
In einem Anwendungsfall, bei dem sowohl Runtime.exec() als auch Werden ProcessBuilder zur Ausführung eines bestimmten Befehls eingesetzt, ergibt sich ein bemerkenswerter Unterschied. Mit Runtime.exec() wird der Befehl erfolgreich mit einem Exit-Wert von 0 beendet. Bei Verwendung von ProcessBuilder ist der Exit-Wert jedoch 1001 und der Befehl wird vorzeitig beendet.
Ursache
Die Diskrepanz liegt in der Art und Weise, wie exec() und ProcessBuilder Befehlsargumente verarbeiten. exec() akzeptiert eine einzelne Zeichenfolge oder ein Array von Zeichenfolgen und tokenisiert die Eingabe in Argumente. Im Gegensatz dazu erwartet ProcessBuilder entweder ein varargs-Array von Zeichenfolgen oder eine Liste
Lösung
Um das Problem zu beheben Stellen Sie bei ProcessBuilder sicher, dass die Befehlsargumente als separate Zeichenfolgen bereitgestellt werden. Zum Beispiel anstelle von Folgendem:
Process p = new ProcessBuilder( "C:\DoStuff.exe -arg1 -arg2" ).start();
Verwenden Sie Folgendes:
Process p = new ProcessBuilder( "C:\DoStuff.exe", "-arg1", "-arg2" ).start();
Alternativ können Sie eine Liste
List<String> params = Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2"); Process p = new ProcessBuilder(params).start();
Das obige ist der detaillierte Inhalt vonRuntime.exec() vs. ProcessBuilder: Warum wird mein Befehl mit Code 1001 beendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!