コンピューティングでは、終了したプロセスの終了ステータス(終了コードまたは終了値とも呼ばれる) は、親プロセス(または呼び出し元)で使用できる整数です。 DOSでは、これをエラーレベルと呼ぶことがあります。
コンピュータ プログラムが実行されると、オペレーティング システムは、そのプログラムの記録を保持するプロセスと呼ばれる抽象エンティティを作成します。 UnixやLinuxなどのマルチタスク オペレーティング システムでは、アクティブ プロセスによって新しいプロセスが作成されます。別のプロセスを生成するプロセスは親プロセスと呼ばれ、生成されたプロセスは子プロセスと呼ばれます。子プロセスは親プロセスと同時に実行されます。子プロセスを生成する手法は、親プロセスの実行を停止する理由がない場合に、子プロセスに一部の作業を委任するために使用されます。子プロセスは実行を終了すると、exitシステム コールを呼び出して終了します。このシステム コールにより、終了ステータス コードを親プロセスに返すことが容易になり、親プロセスはwaitシステム コールを使用してこの値を取得できます。
セマンティクス
親プロセスと子プロセスは、終了ステータスの意味について理解することができます。たとえば、子プロセスが親プロセスに成功を示すゼロを返す (終了する) のは、一般的なプログラミング手法です。子プロセスからのこの戻り値とは別に、プロセスが正常に終了したか、シグナルによって終了したかなどの他の情報も、親プロセスで利用できる場合があります。
返される特定のコード セットは、それを設定するプログラムに固有です。通常、成功または失敗を示します。関数またはプログラムによって返されるコードの値は、特定の失敗の原因を示す場合があります。多くのシステムでは、値が大きいほど、エラーの原因が深刻です。[1]または、各ビットが異なる状態を示し、これらをor演算子でまとめて評価して最終的な値を生成する場合もあります。たとえば、fsck はこれを行います。
場合によっては、この目的を念頭に置いてコードが設計されている場合は、開始プログラムに戻ったときに分岐インデックスとして直接使用して、追加のテストを回避できます。
アミーガOS
AmigaOS、MorphOS、AROSでは、次の 4 つのレベルが定義されています。
- OK 0
- 警告5
- エラー 10
- 失敗 20
シェルとスクリプト
シェル スクリプトは通常、コマンドを実行し、その終了ステータスを取得します。
シェルの目的上、終了ステータスがゼロで終了するコマンドは成功です。終了ステータスがゼロ以外の場合は失敗を示します。この一見直感に反する方式が使用されるのは、成功を示す明確な方法が 1 つあり、さまざまな失敗モードを示す方法が複数あるためです。コマンドが N のシグナルによって終了すると、シェルは変数 $? を 128 より大きい値に設定します。ほとんどのシェルは 128+N を使用しますが、ksh93 は 256+N を使用します。
コマンドが見つからない場合、シェルはステータス127を返します。コマンドが見つかったが実行できない場合は、戻りステータスは126になります。 [2]すべてのシェルに当てはまるわけではないことに注意してください。
展開またはリダイレクト中にエラーが発生してコマンドが失敗した場合、終了ステータスは 0 より大きくなります。
C言語
Cプログラミング言語では、メイン関数から終了または戻るプログラムが、整数を返すか、マクロとを返すことで成功または失敗を通知できます。Unix系システムでは、これらはそれぞれ0と1に等しくなります。[ 3] Cプログラムは、整数ステータスまたは終了マクロを最初のパラメータとして指定する関数を使用することもできます。
EXIT_SUCCESSEXIT_FAILUREexit()
からの戻り値は関数mainに渡されexit、値 0 の場合は関数によって、正常終了EXIT_SUCCESSまたは異常終了EXIT_FAILUREの「実装定義形式」に変換される場合があります。[引用が必要]
ゼロとマクロおよびを除いてEXIT_SUCCESS、EXIT_FAILUREC 標準では戻りコードの意味は定義されていません。戻りコードの使用規則はプラットフォームによって異なります (プラットフォーム固有のセクションを参照)。
ドス
DOS 用語では、エラーレベルは実行可能プログラムまたはサブルーチンによって返される整数の終了コードです。エラーレベルの範囲は通常 0 から 255 です。[4] [5] [6] [7] DOSでは256 個のエラー コードしか使用できませんが、DR DOS 6.0以降では少なくともCONFIG.SYSで 16 ビット エラー コードをサポートしています。[6] 4DOSおよび DR-DOS COMMAND.COMでは、終了コード (バッチジョブの場合) はEXIT n [6]で設定でき、(CONFIG.SYS の場合) ERROR= nで設定できます。[6]
終了ステータスは、バッチプログラムによってIF ERRORLEVELコマンドを通じてキャプチャされることが多い。 [4] [6] マルチユーザー DOSは、アプリケーションから戻ったときに自動的に更新される予約済みの環境変数 %ERRORLVL%をサポートする。DR -DOS 7.02以降の COMMAND.COM は、同様の疑似環境変数%ERRORLVL% と%ERRORLEVEL%をサポートする。CONFIG.SYS では、DR DOS 6.0 以降は、デバイスドライバのロードステータスと戻りコード、およびプログラムの終了コードをテストするためにONERRORをサポートする。[6]
ジャワ
System.exit(int status)Javaでは、セキュリティマネージャが許可しない限り、どのメソッドでも を呼び出すことができます。これにより、現在実行中のJava仮想マシンが終了します。「引数はステータスコードとして機能します。慣例により、0以外のステータスコードは異常終了を示します。」 [8]
オープンVMS
OpenVMSでは、成功は奇数値で示され、失敗は偶数値で示されます。値は32ビットの整数で、制御ビット、機能番号、メッセージ番号、重大度のサブフィールドがあります。重大度の値は成功(成功、情報)と失敗(警告、エラー、致命的)に分かれています。[9]
プラン9
Plan 9 の C では、終了ステータスはexits関数に渡される文字列によって示され、関数 main はvoid 型です。
POSIX
Unixやその他のPOSIX互換システムでは、親プロセスはwait()wait.hで定義されているシステムコールのファミリを使用して子プロセスの終了ステータスを取得できます。[10] これらのうち、waitid()[11]の呼び出しは完全な終了ステータスを取得しますが、古い[12]wait()の呼び出しは終了ステータスの最下位8ビットのみを取得します。
waitpid()
wait()およびインターフェースは、さまざまなタイプの子終了情報を持つビットフィールドとして、タイプが packed のステータスwaitpid()値を設定します。子が exiting によって終了した場合 (マクロによって決定されます。通常は、キャッチされていないシグナルによって終了した場合)、SUS は、マクロを使用してステータス値から終了ステータスの下位 8 ビットを取得できることを指定します。
intWIFEXITED()WEXITSTATUS()
システムコール(SUSv1で追加)ではwaitid()、子プロセスの終了ステータスやその他の情報はビットフィールドではなく、型の構造体に格納されるようになりましたsiginfo_t。[13]
POSIX互換システムでは、通常、成功の場合はゼロ、エラーの場合は非ゼロという規則が使用されています。[14] さまざまなエラーコードの相対的な意味については、いくつかの規則が開発されています。たとえば、GNUは、上位ビットが設定されているコードは重大なエラー用に予約することを推奨しています。[3]
BSD由来のOSでは、推奨される解釈の広範なセットが定義されています。64から78までの15個のステータスコードの意味はsysexits.hで定義されています。[15]これらは歴史的にはsendmailやその他のメッセージ転送エージェントから派生したものですが、その後多くの他のプログラムでも使用されるようになりました。[16]
高度なBashスクリプトガイドと/usr/include/sysexits.hには、0以外の終了ステータスコードの意味に関する情報が記載されています。[17]
ウィンドウズ
Microsoft Windowsでは終了コードとして32ビットの符号なし整数を使用しますが[18] [19]、コマンドインタープリタはそれを符号付きとして扱います。[20]
終了コードは、たとえば、DOSから継承された用語でコマンド ライン インタープリターCMD.exeによって直接参照されます。.NET FrameworkプロセスとWindows PowerShell は、それをオブジェクトのプロパティとして参照します。
errorlevelExitCodeProcess
参照
参考文献
- ^ "エラーレベル". Rob van der Woude のスクリプト ページ。2007 年 8 月 26 日に取得。
- ^ 「シェルコマンド言語 - コマンドの終了ステータス」。The Open Group 。2015年7月7日閲覧。
- ^ ab 「GNU C ライブラリリファレンスマニュアル 25.6.2: 終了ステータス」。Gnu.org。2012年 7 月 9 日閲覧。
- ^ ab ポール、マティアス R. (1997-05-01) [1993-10-01]。 BATTIPs — バッチジョブのプログラムに関するヒントとコツ (ドイツ語)。 7: エラーレベル アブフラゲン。 2017-08-23 のオリジナルからアーカイブ。2017 年 8 月 23 日に取得。
{{cite book}}:|work=無視されました (ヘルプ) [1] [2] 2017-09-11にarchive.todayにアーカイブされました(注: BATTIPS.TXTはMPDOSTIP.ZIPの一部です。提供されたリンクは、HTMLに変換された古いバージョンのBATTIPS.TXTファイルを指しています。) [3] - ^ Auer, Eric; Paul, Matthias R.; Hall, Jim (2015-12-24) [2003-12-31]. 「MS-DOS errorlevels」。2015-12-24時点のオリジナルよりアーカイブ。
- ^ abcdef ポール、マティアス R. (1997-07-30) [1994-05-01]. NWDOS-TIP — Novell DOS 7 に関するヒントとコツ、詳細、バグ、回避策を含む Blick です。リリース 157 (ドイツ語) (第 3 版)。 2016-11-04 のオリジナルからアーカイブ。2014 年 8 月 6 日に取得。
{{cite book}}:|work=無視 (ヘルプ) (注: NWDOSTIP.TXT はNovell DOS 7およびOpenDOS 7.01に関する包括的な資料で、多くの文書化されていない機能や内部構造の説明が含まれています。提供されているリンクは、コレクションの一部であるファイルの HTML 変換バージョンを指していますMPDOSTIP.ZIP。) [4] - ^ Allen, William; Allen, Linda. 「Windows 95/98/ME ERRORLEVELs」。2011-07-07時点のオリジナルよりアーカイブ。
- ^ 「Java 1.6.0 API」。Sun Microsystems 。 2008年5月6日閲覧。
- ^ 「OpenVMS 戻りステータス値の形式」 H71000.www7.hp.com。 2012 年 3 月 19 日のオリジナルからアーカイブ。2012 年 7 月 9 日に取得。
- ^ – ベース定義リファレンス、The Single UNIX 仕様、バージョン 4、The Open Group
- ^ – システム インターフェース リファレンス、The Single UNIX 仕様、バージョン 4、The Open Group
- ^ – システム インターフェース リファレンス、The Single UNIX 仕様、バージョン 4、The Open Group
- ^ 「2.4.3 シグナルアクション」。The Open Group 。2019年2月8日閲覧。
- ^ 「第6章 終了と終了ステータス」。 Faqs.org 。2012年7月9日閲覧。
- ^ : プログラムの推奨終了コード – FreeBSDライブラリ関数マニュアル
- ^ Google で「"sysexits.h" site:github.com」を検索すると、「約 3,540 件の結果」が返されます。2013 年 2 月 21 日に取得。
- ^ 「特別な意味を持つ終了コード」。
- ^ 「ExitProcess 関数」。2016年 12 月 16 日閲覧。
- ^ 「GetExitCodeProcess 関数」。2022年 4 月 22 日閲覧。
- ^ 「ExitCodes が 255 より大きいことは可能ですか?」。2009 年 9 月 28 日閲覧。
