繁体   English   中英

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

[英]How to get the java program completion status from unix shell script?

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

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

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

Java的:

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程序的返回状态,那么您实际上是在尝试读取jvm的退出状态而不是您的java程序的退出状态,这在正常情况下始终为零(0)如果由于任何异常而导致程序崩溃,那就更难了。 只有当jvm由于OutOfMemory等意外原因或类似的关键性崩溃而崩溃时,才会获得非零退出状态。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM