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