コンピュータにおいて、終了したプロセスの終了ステータス(終了コードまたは終了値とも呼ばれる)は、親プロセス(または呼び出し元)に提供される整数値です。DOSでは、これはエラーレベルと呼ばれることがあります。
コンピュータプログラムが実行されると、オペレーティングシステムは、そのプログラムの記録を管理するプロセスと呼ばれる抽象的なエンティティを作成します。UnixやLinuxなどのマルチタスクオペレーティングシステムでは、アクティブなプロセスによって新しいプロセスを作成できます。別のプロセスを生成するプロセスを親プロセスと呼び、生成されたプロセスを子プロセスと呼びます。子プロセスは親プロセスと並行して実行されます。子プロセスを生成する手法は、親プロセスの実行を停止する必要がない場合に、一部の作業を子プロセスに委任するために使用されます。子プロセスは実行が完了すると、exitシステムコールを呼び出して終了します。このシステムコールは、終了ステータスコードを親プロセスに渡すことを可能にし、親プロセスはこの値をwaitシステムコールを使用して取得できます。
親プロセスと子プロセスは、終了ステータスの意味について共通の理解を持つことができます。例えば、子プロセスが親プロセスに成功を示すためにゼロを返す(終了する)のは、一般的なプログラミング手法です。子プロセスからのこの戻り値以外にも、プロセスが正常に終了したのか、シグナルによって終了したのかといった情報も、親プロセスに提供される場合があります。
返される特定のコードセットは、それを設定するプログラムに固有のものです。通常、それは成功または失敗を示します。関数またはプログラムによって返されるコードの値は、特定の失敗の原因を示す場合があります。多くのシステムでは、値が高いほど、エラーの原因は深刻です。[ 1 ]あるいは、各ビットが異なる状態を示す場合もあり、これらは論理和演算子によって一緒に評価され、最終的な値が得られます。たとえば、fsck はこれを行います。
場合によっては、コードがこの目的を念頭に置いて設計されている場合、追加のテストを回避するために、開始プログラムに戻った際に分岐インデックスとして直接使用することができます。
AmigaOS、MorphOS、AROSでは、4つのレベルが定義されています。
シェルスクリプトは通常、コマンドを実行し、その終了ステータスを取得します。
シェルの目的上、終了ステータスがゼロで終了するコマンドは成功したとみなされます。ゼロ以外の終了ステータスは失敗を示します。この一見直感に反するスキームは、成功を示す明確な方法が1つあり、さまざまな失敗モードを示す方法が複数あるようにするために使用されています。コマンドが番号が のシグナルによって終了するとN、シェルは変数を$?128 より大きい値に設定します。ほとんどのシェルは128+Nを使用しますが、ksh93 は256+Nを使用します。
コマンドが見つからない場合、シェルはステータス127を返す必要があります。コマンドが見つかったが実行できない場合は、戻りステータスは126 である必要があります。[ 2 ]ただし、これはすべてのシェルに当てはまるわけではありません。
展開またはリダイレクト中のエラーが原因でコマンドが失敗した場合、終了ステータスはゼロより大きい値になります。
CおよびC++プログラミング言語では、メイン関数から終了または戻るプログラムが、整数を返すか、マクロとを返すことで、成功または失敗を通知することができます。Unix ライクなシステムでは、これらはそれぞれ と に等しくなります。[ 3 ] ACプログラムは、最初のパラメータとして整数ステータスまたは終了マクロを指定する関数を使用することもできます。これにより、プログラムが停止します。EXIT_SUCCESSEXIT_FAILURE01exit()
からの戻り値は関数mainに渡されexit、値がゼロの場合は、EXIT_SUCCESSまたは正常終了または異常終了EXIT_FAILUREの「実装定義形式」に変換される場合があります。
0マクロとを除きEXIT_SUCCESS、EXIT_FAILUREC標準では戻りコードの意味は定義されていません。戻りコードの使用に関する規則はプラットフォームによって異なります(プラットフォーム固有のセクションを参照してください)。
C#では、Main()メソッドは通常、型を返しません (型はvoid、またはの場合async、ですSystem.Threading.Tasks.Task)。ただし、は、オペレーティングシステムに返されるMain()型の戻り値型を示す場合があります。メソッドがとして宣言されている場合、代わりにが返されます。[ 4 ]intMain()asyncSystem.Threading.Tasks.Task<int>
DOS の用語では、エラーレベルは実行可能プログラムまたはサブルーチンによって返される整数の終了コードです。エラーレベルは通常0から255の範囲です。[ 5 ] [ 6 ] [ 7 ] [ 8 ] DOSでは256 個のエラーコードしか使用できませんが、DR DOS 6.0以降では、少なくともCONFIG.SYSで 16 ビットのエラーコードがサポートされています。[ 7 ] 4DOSおよび DR-DOS COMMAND.COMでは、終了コード (バッチジョブ内) はEXIT n [ 7 ]で、また ( CONFIG.SYS内) はERROR= nで設定できます。[ 7 ]
終了ステータスは、バッチ プログラムによってIF ERRORLEVELコマンドで取得されることがよくあります。[ 5 ] [ 7 ]マルチユーザーDOS は、アプリケーションから戻ると自動的に更新される予約済みの環境変数%ERRORLVL%をサポートしています。DR -DOS 7.02以降のCOMMAND.COM は、同様の擬似環境変数%ERRORLVL%と%ERRORLEVEL%をサポートしています。CONFIG.SYSでは、DR DOS 6.0 以降はONERRORを使用してデバイス ドライバのロード ステータスと戻りコード、およびプログラムの終了コードをテストします。[ 7 ]
Javaでは、main()終了コードは示されないため、必要に応じて、終了コードは を介して手動で指定されjava.lang.System::exit()、これによりプログラムと JVM が終了します。System.exit()セキュリティマネージャが許可しない限り、どのメソッドでも を呼び出すことができます。引数はステータス コードとして機能します。慣例として、ゼロ以外のステータス コードは異常終了を示します。[ 9 ]
OpenVMSでは、奇数値は成功、偶数値は失敗を示します。値は32ビット整数で、制御ビット、施設番号、メッセージ番号、重大度というサブフィールドがあります。重大度値は、成功(成功、情報)と失敗(警告、エラー、致命的)に分けられます。[ 10 ]
Plan 9 の C では、終了ステータスはexits()関数に渡される文字列によって示され、関数main()はvoid型です。
Unixやその他のPOSIX 互換システムでは、親プロセスはPOSIX ヘッダーwait()で定義されているシステムコール群を使用して子プロセスの終了ステータスを取得できます。[ 11 ] これらのうち、[ 12 ]コールは完全な終了ステータスを取得しますが、古いコールと[ 13 ]コールは終了ステータスの最下位 8 ビットのみを取得します。<wait.h>waitid()wait()waitpid()
およびインターフェースは、さまざまな種類の子終了情報を含むビットフィールドとしてパックされたタイプのステータス値を設定しますwait()。子が終了によって終了した場合(マクロによって決定されます。通常は、捕捉されないシグナルによって終了した場合)、SUSは、マクロを使用してステータス値から終了ステータスの下位8ビットを取得できると規定しています。waitpid()intWIFEXITED()WEXITSTATUS()
システムコール(SUSv1で追加)ではwaitid()、子終了ステータスやその他の情報はビットフィールドではなく、型の構造体に格納されるようになったsiginfo_t。[ 14 ]
POSIX互換システムでは、通常、成功にはゼロ、エラーにはゼロ以外の値を使用する慣例が用いられます。[ 15 ] さまざまなエラーコードの相対的な意味については、いくつかの慣例が発展してきました。たとえば、GNUでは、最上位ビットがセットされたコードは重大なエラーのために予約しておくことを推奨しています。[ 3 ]
BSD 由来の OS は、推奨される解釈の広範なセットを定義しています。15 個のステータス コード 64 ~ 78 の意味は POSIX ヘッダーで定義されています<sysexits.h>。[ 16 ]これらは歴史的にsendmailやその他のメッセージ転送エージェントに由来しますが、その後、他の多くのプログラムでも使用されるようになりました。[ 17 ] これは非推奨であり、使用は推奨されていません。[ 16 ]
高度なBashスクリプトガイドには、0以外の終了ステータスコードの意味に関する情報がいくつかあります。[ 18 ]
Rustでは、main()トレイトを実装する任意の型を返すことができますstd::process::Termination。[ 19 ]
Rustランタイム内部では、これらはlibc::EXIT_SUCCESS実行が成功した場合とlibc::EXIT_FAILURE失敗した場合にそれぞれ値を返します。
Rust標準ライブラリでは、以下の型に実装がありますstd::process::Termination。
Microsoft Windows は、終了コードとして 32 ビットの符号なし整数を使用しますが、[ 21 ] [ 22 ]コマンド インタプリタはそれらを符号付きとして扱います。[ 23 ]
終了コードは、例えば、DOSから受け継がれた用語で、コマンドラインインタープリタCMD.exeなどによって直接参照されます。.NET FrameworkプロセスやWindows PowerShellでは、オブジェクトのプロパティとして参照されます。errorlevelExitCodeProcess
{{cite book}}:|work=無視されました (ヘルプ)非推奨リンクは2017年9月11日にarchive.todayにアーカイブされました(注:BATTIPS.TXTはMPDOSTIP.ZIPの一部です。提供されているリンクは、HTMLに変換された古いバージョンのBATTIPS.TXTファイルを指しています)。{{cite book}}:|work=無視されました (ヘルプ) (注: NWDOSTIP.TXT はNovell DOS 7およびOpenDOS 7.01に関する包括的な資料であり、多くの未公開機能や内部構造の説明が含まれています。提供されているリンクは、この資料の一部である HTML 変換版のファイルへのリンクです。)MPDOSTIP.ZIP