无法在Java中启动任何进程(ProcessBuilder进程立即返回,退出代码为128)

时间:2011-05-17 21:25:30

标签: java processbuilder

我正在尝试让Java执行另一个程序,它会立即出错,退出代码为128,并且没有任何内容发送到stdout或stderr。我尝试了一个简单的“java -version”仍然没有运气。当我在cmd窗口中运行它时,它运行正常,此代码适用于类似配置的其他计算机(Windows Server 2003 x64,Java 1.6更新25)

在命令行上运行时:

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

2 个答案:

答案 0 :(得分:1)

因此我们通过杀死大量系统进程来“解决”这个问题。我们认为这个问题与这里描述的问题密切相关:http://www.arcanadev.com/support/kb/K00000329.aspx,进程试图调用java的exec超出可用的堆空间或内存。很奇怪。

答案 1 :(得分:0)

您应该在p.waitFor()之前致电p.exitValue()