たとえば、以下のステートメントを実行していて、Java 実行のステータスに基づいてさらに処理したいとします。
java -classpath $CLASSPATH com.heb.endeca.batch.BatchManager "param1" "param2" "param3"
Java コードが で終了する場合System.exit(status)
、次のように Bash でステータスを取得できます。
ジャワ:
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
です。
したがって、呼び出しプログラム (この場合はシェル) からの Java プログラムの戻りステータスをチェックしている場合jvm
、通常の状態では常にゼロになる Java プログラムではなく、実際に終了ステータスを読み取ろうとしています ( 0) 何らかの例外が原因でプログラムがクラッシュした場合はさらに困難です。OutOfMemory
予期しない理由または同様の重大な理由で jvm がクラッシュした場合にのみ、0 以外の終了ステータスが返されます。
これが、Java プログラムの終了ステータスをキャッチする方法を理解するのに役立つことを願っています。