質問

「はい」の場合、どのオペレーティングシステム、シェルなどで使用しますか?

次のJavaプログラムを検討してください(例としてJavaを使用していますが、この質問にはどの言語でも使用できます。オペレーティングシステムの詳細です):

public class ExitCode {
    public static void main(String args[]) {
        System.exit(Integer.parseInt(args[0]));
    }
}

Linuxおよびbashで実行すると、常に255以下の値が返されます。 ( echo $?は、前に実行されたコマンドの終了コードを出力します)

> java ExitCode 2; echo $?
2

> java ExitCode 128; echo $?
128

> java ExitCode 255; echo $?
255

> java ExitCode 256; echo $?
0

> java ExitCode 65536; echo $?
0

編集済み:(これまでのところ)以下の回答は、UNIXで何が起こるかを完全に説明しています。私はまだ他のOSについて疑問に思っています。

役に立ちましたか?

解決

Unixおよび派生物では不可能です。返される終了ステータス情報は、2つの8ビットフィールドで構成されます。1つは終了ステータスを含み、もう1つは死の原因に関する情報を含みます(0はプログラム制御下での秩序ある終了を意味し、他の値はシグナルがそれを殺したことを示し、コアがダンプされました)。

他のヒント

最新のWindows、OS自体、およびデフォルトのコンソールシェル( CMD.EXE )では、少なくとも32ビットの符号付き整数の範囲全体で終了コードを受け入れて表示します。 CMD.EXE で上記の例を実行すると、要求した終了コードが表示されます。

> java ExitCode 2
> echo %errorlevel%
2

> java ExitCode 128
> echo %errorlevel%
128

> java ExitCode 255
> echo %errorlevel%
255

> java ExitCode 256
> echo %errorlevel%
256

> java ExitCode 65536
> echo %errorlevel%
65536

Windowsには実際にはUnixシグナルの概念がなく、シェル(または終了プログラムを読み取るプログラム)が実行しない限り、終了コードをハイジャックして追加情報を追加しようとしません。どちらか、返された終了コードを取得する必要があります。幸いなことに、MicrosoftのCランタイムを使用するプログラム(MS Visual C ++でコンパイルされたすべてのプログラムを含む)は、終了プロセスからの終了コードをそのまま保持します。

Windowsにはさらに多くの終了コードがあり、14,000を超えています。 (あなたは自分のスクリーンでそれらのいくつかをしばしば見たと確信しています。)

こちら:

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top