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