【问题标题】:How to get the java program completion status from unix shell script?如何从 unix shell 脚本获取 java 程序完成状态?
【发布时间】:2012-10-22 23:35:32
【问题描述】:

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

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

【问题讨论】:

    标签: java shell unix


    【解决方案1】:

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

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

    public static void main() 
    

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        Java:

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

        重击:

        $ java E
        $ echo $?
        42
        

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

        【讨论】:

        • 有没有其他方法可以捕获状态,因为在 java System.exit() 中不是正常的退出方式。
        • 您可以使用 echo $? 捕获状态,即使 java 程序没有使用 System.exit() 退出,默认情况下它会在程序正常退出时向操作系统返回 0(表示成功)状态。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 2010-10-06
        • 2011-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多