6

我有一个程序是:

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 ${?}. 现在我想通过使用程序来做同样的事情,但程序只是给出输出${?}。请帮帮我!

4

1 回答 1

18

Process.waitFor() 返回一个int退出代码的地方。如果您启动一个不相关的程序,则不会有以前的退出代码,这就是它不返回任何有用的原因。

您不能可靠地使用 exitValue(),因为您可以在程序完成之前调用它。你应该只在调用 waitFor() 之后调用它(它会给出相同的退出代码 waitFor() )

来自exitValue 的Javadoc

抛出: IllegalThreadStateException - 如果此 Process 对象表示的子进程尚未终止。

于 2011-05-04T16:50:45.020 回答