簡體   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