Невозможно запустить ЛЮБОЙ процесс в Java (процесс ProcessBuilder сразу возвращается с кодом завершения 128) - PullRequest
2 голосов
/ 18 мая 2011

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

Ответы [ 2 ]

1 голос
/ 25 мая 2011

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

0 голосов
/ 18 мая 2011

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

...