Javaプログラムがアクティビティを停止し、実行を終了する理由は何ですか? 根本原因は2(
JLSセクション12.8 )である可能性があります。
- デーモンではないすべてのスレッドが実行されます。
- 一部のスレッドは、RuntimeクラスまたはSystemクラスのexit()メソッドを呼び出し、
SecurityManagerは、終了する緑色のライトを提供します()。
どちらの場合も、シャットダウンプロセス中に、JVMは終了コードを親プロセス(JVMを起動したプロセス)-int型の値に渡します。これに基づいて、親プロセスはJVMに割り当てられたタスクの成功または失敗に関する結論を引き出すことができます。
一般に受け入れられている慣行と確立された標準に基づいて、終了コード0は、タスクが正常に完了したことを示すシグナルです。
public class Example1 { public static void main(String args[]) { System.out.println("Example 1"); } }
完了時に上記の最初のケースでJVMが返す値は0です。
これはどのように確認できますか?
ここで、
ERRORLEVELコマンドラインパラメーターが役立ちます。これにより、最後に実行したプログラムの終了コードを取得できます。
スクリーンショットからわかるように、終了コードは0です。
exit()メソッドを使用して、2番目のケースに進みます。
exitメソッドに渡すことができる値は何ですか?
ドキュメントに基づいて:
引数はステータスコードとして機能します。 慣例により、ゼロ以外のステータスコードは異常終了を示します。
ええ、2つのオプションがあります:0、またはゼロ以外の値。 2番目のオプションは、任意の負の数と任意の正の数のint型の2つのサブオプションに分割できます。
したがって、オプションを0にしてみてください。
public class Example2 { public static void main(String args[]) { System.out.println("Example 2 - Start"); System.exit(0); System.out.println("Example 2 - End"); } }
ご覧のとおり、親プロセスは再びJVMの正常な完了に関する情報を受け取りました。
そして、ゼロ以外の値はどうですか? 何を、いつ、どのような場合に送信しますか?
ここではすべてが単純です-ゼロ以外の要件はなく、1つの一般的なルールのみに従ってください。
- 何かがおかしくなりそうであることが予想される場合、値が0の終了コードを返します。たとえば、args []のデータが正しくない、アプリケーションが動作するための重要なファイルが見つからない、または接続できないサーバーなど。
- 予測できず、まったく予期しなかった何かが発生した場合(何らかのシステムエラー)、値<0の終了コードを返します。
また、次のアプローチをガイドすることもできます-希望する終了コードの値を返す。 このオプションは、親プロセス(この場合はcmd)が終了コードの追加処理を行わないことがわかっている場合に使用できます。この場合、任意の値を自由に返すことが
でき、何にも影響しません 。
最後のオプション:終了コードが追加で処理されることがわかっている場合、自分で値を作成しないために、OSレベルで使用される値を借用できます。
たとえば、WindowsファミリのOSの場合、15999コードの完全なリストがあります:
System Error Codes 、Linuxファミリの独自のリスト:
sysexits.h