如何从unix shell脚本获取java程序完成状态?

时间:2012-11-02 10:02:49

标签: java shell unix

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

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

3 个答案:

答案 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程序的退出状态。

相关问题