Perl、Python、C++、またはTclプログラムが未処理の例外で停止すると、これらの言語ランタイムは、プロセスにゼロ以外の終了コードを登録するように注意します。 Eclipseベースのプログラムでさえ、起動中に失敗すると1を返します。ただし、標準の_Java.exe
_で実行されるプログラムは、プログラムが終了値を指定してSystem.exit()
を呼び出さない限り、どんなに突然終了しても、喜んでゼロを返します。 AssertionFailedError
またはUnsatisfiedLinkError
でさえ、正常に終了したことを呼び出しプログラムに報告します。
もちろん、すべてのシステムにプログラムの戻りコードがあるわけではありませんが、UnixとWindowsは、子プロセスにJava.lang.Process.exitValue()
を保証するのに十分重要でした。彼らはまた、親プロセスの名誉ある慣習を保証しませんか?
これは言語設計の欠陥ですか、それとも実装の欠陥ですか?それが良い考えだという議論はありますか?
Java言語仕様で期待される終了値が明示的に定義されていない場合、それはndefinedであり、これに依存しないでください。
メインメソッドでThrowableをキャッチし、System.exit(1)を自分で呼び出す必要があります。