終了ステータスコンピュータプログラミングにおけるプロセスの終了ステータス(英: exit status)またはリターンコード(英: return code)とは、子プロセス(または呼び出された側)が具体的な手続きや委任されたタスクを実行完了した際、親プロセス(または呼び出した側)に渡す小さな数である。MS-DOSのCOMMAND.COMではERRORLEVELという。 プログラムを実行するとき、オペレーティングシステム (OS) はプロセスと呼ばれる、プログラムの「活動実体」を生成し、その中にそのプログラムのための情報を保持する。UNIXやLinuxなどのマルチタスクOSでは、新たなプロセスは動作可能プロセスとして生成される。別のプロセスを生成するプロセスを「親プロセス」と呼び、生成された側を「子プロセス」と呼ぶ。子プロセスと親プロセスは同時並行的に動作する。子プロセスが実行完了したとき、exitシステムコールを呼び出すことで終了する。このシステムコールが終了ステータスのコードを親プロセスに渡す役割を果たし、親プロセスはwaitシステムコールでその値を受け取ることができる。子プロセスが exit を呼び出して終了してから、親プロセスが wait を呼び出して受け取るまでの間の、子プロセスの状態を幽霊(米国ではゾンビ)と呼ぶ[1]。 意味論親プロセスと子プロセスの間で終了ステータスの意味について認識を合わせることができる。例えば一般に、子プロセスがゼロを返したとき親プロセスは正常終了だと判断する。終了ステータス以外にも、シグナルなどを使って親プロセスに子プロセスの終了時の状態を通知することは可能である。 どのようなコードを返すかは、プログラム毎に独自に決めている。一般に成功(正常終了)か失敗(異常終了)かを示すことが多い。関数やプログラムが返すコードの値で、失敗の原因を示すこともある。多くのシステムでは、値が大きければ大きいほどエラーの原因が深刻であることを表すようにしている[2]。それとは別に、ビット毎に意味を持たせ、それらの論理和で終了ステータスを決定することもある。例えば、fsckがそのようにしている。 時には、終了ステータスをうまく設計し、呼び出した側のプログラムがそれをそのまま条件分岐のインデックスとして使うということも可能である。 bashbash の終了ステータスの範囲は 0 から 255 で、0 は正常終了、それ以外は異常終了である。
範囲外の整数が 以下の終了ステータスが予約されている。[3]
C言語C言語では、main関数からの復帰で整数値を返すことで成功か失敗かを通知することができ、そのためのマクロ
JavaJavaでは、セキュリティマネージャが禁止していない限り、任意のメソッドから OSごとの詳細Unix系Unix系では、 慣習的に正常終了時はゼロ、異常終了時はゼロ以外を返すのが一般的である[7]。各種エラーコードの意味について規約を定めようとした例もある。例えばGNUは上位ビットを深刻なエラーを示すために予約することを推奨している[4]。BSDではさらに細かく推奨される解釈を文書化している[8][9][10]。 DOSDOSでは終了ステータスをエラーレベルとも呼ぶ。通常、0から255までの値をとる。バッチファイルで終了ステータスを参照するコマンドとして OpenVMSOpenVMSでは、正常終了を奇数値、異常終了を偶数値で表す。終了スタータスは32ビット整数だが、サブフィールドに分割されており、制御ビット群、ファシリティ番号、メッセージ番号、深刻度で構成される。深刻度の値は正常 (Success, Informational) と異常 (Warning, Error, Fatal) に分けられる[11]。 WindowsWindowsでは終了コードとして32ビット符号付き整数を使用する[12]。プロセスの初期化時点で失敗した場合、Windowsのシステムエラーコードが返される[13]。Windowsのシステムエラーコードはオンラインで公開されている[14]。 cmd.exeの 脚注
関連項目 |