例如,我们正在执行以下语句,我们希望根据java执行的状态进一步处理。
java -classpath $CLASSPATH com.heb.endeca.batch.BatchManager "param1" "param2" "param3"
答案 0 :(得分:9)
如果您的Java代码以System.exit(status)
退出,您可以像这样在Bash中获取状态:
<强>爪哇:强>
public class E {
public static void main(String[] args) {
System.exit(42);
}
}
<强>击:强>
$ java E
$ echo $?
42
$?
是上次完成的流程的退出状态。
答案 1 :(得分:2)
java程序应该以System.exit(status)结束。该号码与操作系统中的任何其他命令一起返回。
答案 2 :(得分:0)
正如其他人所说,您需要使用System.exit()
来获得所需的输出。这背后的原因是System.exit()
直接终止程序并退出返回定义的值。
如果您想知道为什么我们无法从main
方法返回任何内容,答案是 - 在java main
方法中永远不会返回任何内容,如果您分析黄金需要的语句
public static void main()
你会看到,在java main中有一个返回类型为void
。
因此,如果您正在从调用程序(在本例中为Shell)中检查java程序的返回状态,那么您试图实际读取jvm
的退出状态而不是您的java程序的退出状态。如果由于任何异常而导致程序崩溃,那么在正常情况下总是会为零(0)甚至很难。只有当jvm由于诸如OutOfMemory
之类的意外原因或类似的关键事件而崩溃时,您才会获得非零退出状态。
希望这有助于您理解捕获java程序的退出状态。