我想讓Java執行另一個程序,並且它立即以退出碼128錯誤輸出,並且沒有任何內容發送到stdout或stderr。我嘗試了一個簡單的「java -version」,但沒有運氣。當我在CMD窗口中運行它,它運行良好,這代碼工作在同樣配置其他機器(在Windows Server 2003 x64上,Java 1.6的更新25)無法在Java中啓動任何進程(ProcessBuilder進程立即返回,退出代碼爲128)
當在命令行中運行:
C:\Documents and Settings\zugwalt>java -version
輸出:
java version "1.6.0_25" Java(TM) SE
Runtime Environment (build1.6.0_25-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.0-b11, mixed mode)
那我試試這個代碼:
try {
List<String> cmd = new LinkedList<String>();
cmd.add("java");
cmd.add("-version");
ProcessBuilder apb = new ProcessBuilder(cmd);
apb.redirectErrorStream(true);
System.out.println("STARTING w00t!");
Process p = apb.start();
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = input.readLine()) != null) {
System.out.println("OUTPUT: "+line);
}
System.out.println("EXIT: "+p.exitValue());
System.out.println("WAIT FOR: "+p.waitFor());
} catch (Exception ex) {
System.out.println("CAUGHT: "+ex.getMessage());
ex.printStackTrace();
}
輸出是:
STARTING w00t!
EXIT: 128
WAIT FOR: 128
有關發佈到ServerFault的特定體系結構/環境的更多詳細信息(和重點):http://serverfault.com/questions/270657/java-subprocess-running-from-iis6-returns-exit-value-128-and -no-stdout-stderr – 2011-05-17 21:39:17
「出錯」 我喜歡那樣。 – Sid 2011-05-17 21:50:37
即使底層操作系統進程(java.exe)似乎沒有成功啓動,它仍然非常有趣(令人沮喪),即進程對象(p)不爲空,並且不會引發異常。 – 2011-05-17 22:00:54