如何从Java内部运行Process来获取bash命令退出代码?

我有一个程序是:

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是一个文本文件。 当我在terminal运行任何正常的命令,并在那之后,如果我使用echo ${?}检查退出代码。 现在我想通过使用一个程序来做同样的事情,但是程序只是给出${?}的输出。 请帮帮我!

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

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

从Javadoc退出值

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