我想让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