Невозможно запустить ЛЮБОЙ процесс в Java (процесс ProcessBuilder немедленно возвращается с кодом выхода 128)

Я пытаюсь заставить Java выполнить другую программу, и она немедленно выдает ошибку с кодом выхода 128, и ничего не отправляется на стандартный вывод или стандартный вывод. Я попробовал простую «java-версию» до сих пор безуспешно. Когда я запускаю его в окне 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

person Zugwalt    schedule 17.05.2011    source источник
comment
Дополнительные сведения (и фокус) о конкретной архитектуре/среде, опубликованные на ServerFault: serverfault.com/questions/270657/   -  person Paul Karlin    schedule 18.05.2011
comment
Особенно интересно (и разочаровывает), что объект Process (p) не равен null и что исключения не выбрасываются, даже если базовый процесс ОС (java.exe) не запускается успешно.   -  person Paul Karlin    schedule 18.05.2011


Ответы (2)


Поэтому мы «решили» это, уничтожив большое количество системных процессов. Мы считаем, что проблема тесно связана с проблемами, описанными здесь: http://www.arcanadev.com/support/kb/K00000329.aspx, когда процессу, пытающемуся вызвать исполняемый файл Java, не хватило места в куче или памяти. Очень странный.

person Zugwalt    schedule 25.05.2011

Вы должны позвонить p.waitFor() до p.exitValue().

person Steve Emmerson    schedule 17.05.2011
comment
Вызов p.waitFor() без p.exitValue() также дает 128. - person Paul Karlin; 18.05.2011
comment
На самом деле я вообще не вызывал p.exitValue() и имел ту же проблему. Я только что добавил p.exitValue(), чтобы дать дополнительный контекст (программа даже не запускается) - person Zugwalt; 18.05.2011