Как получить код завершения команды bash из процесса, запущенного из Java? - PullRequest
5 голосов
/ 04 мая 2011

У меня есть программа:

import java.io.*;
   import java.util.*;

   public class ExecBashCommand {
     public static void main(String args[]) throws IOException {

       if (args.length <= 0) {
         System.err.println("Need command to run");
         System.exit(-1);
       }

       Runtime runtime = Runtime.getRuntime();
       Process process = runtime.exec("./nv0914 < nv0914.challenge");
       Process process1 = runtime.exec("echo ${?}");
       InputStream is = process1.getInputStream();
       InputStreamReader isr = new InputStreamReader(is);
       BufferedReader br = new BufferedReader(isr);
       String line;

       //System.out.printf("Output of running %s is:", Arrays.toString(args));

       while ((line = br.readLine()) != null) {
         System.out.println(line);
       }

     }
    } 

Примечание: nv0914 - это исполняемый файл bash, а nv0914.challenge - это текстовый файл.Когда я запускаю любую обычную команду в терминале и сразу после этого, если я проверяю код выхода, используя echo ${?}.Теперь я хочу сделать то же самое с помощью программы, но программа просто дает вывод ${?}.Пожалуйста, помогите мне!

1 Ответ

17 голосов
/ 04 мая 2011

Process.waitFor () возвращает int Вот где возвращается код выхода.Если вы запустите несвязанную программу, у вас не будет предыдущего кода выхода, поэтому она не возвращает ничего полезного.

Вы не можете использовать exitValue () надежно, потому что вы можете вызвать его до того, как программазаконченный.Вы должны вызывать его только после вызова waitFor () (и он даст тот же код завершения, что и waitFor ())

Из Javadoc для exitValue

Броски: IllegalThreadStateException - еслиподпроцесс, представленный этим объектом Process, еще не завершен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...