7

例如我们正在执行下面的语句,我们希望根据 java 执行的状态进一步处理。

java -classpath  $CLASSPATH com.heb.endeca.batch.BatchManager "param1" "param2" "param3"
4

3 回答 3

9

如果您的 Java 代码以 退出System.exit(status),您可以像这样在 Bash 中获取状态:

爪哇:

public class E {
    public static void main(String[] args) {
        System.exit(42);
    }
}

重击:

$ java E
$ echo $?
42

$?是最后完成的进程的退出状态。

于 2012-11-02T10:05:57.467 回答
2

java 程序应该以 Sytem.exit(status) 结尾。此编号作为操作系统中的任何其他命令返回。

于 2012-11-02T10:06:27.360 回答
0

正如其他人所说,您需要使用System.exit()来获得所需的输出。这背后的原因是System.exit()直接终止程序并退出返回定义的值。

如果您想知道为什么我们不能从该方法返回任何内容,答案是 -如果您分析黄金必需语句,那么main在 java方法中永远不会返回任何内容main

public static void main() 

您会看到,在 java 中 main 的返回类型为void.

因此,如果您正在从调用程序(在本例中为 Shell)检查 java 程序的返回状态,您实际上是在尝试读取 java 程序的退出状态,jvm而不是正常情况下始终为零的 java 程序的退出状态( 0) 即使你的程序由于任何异常而崩溃,也很难。OutOfMemory只有当 jvm 由于意外原因或类似的关键原因而崩溃时,您才会获得非零退出状态。

希望这有助于您理解捕获 java 程序的退出状态。

于 2012-11-02T12:26:32.467 回答