Cの終了コード11の一般的な意味は何ですか?私は周りを見回したが、決定的な答えを見つけることができないので、私はここで尋ねると思った。要素をベクターに追加しようとするとそれが来ます。
決定的な答えは見つかりませんでした。使用する終了コードを決定するのはプログラムの作成者次第です。標準Cは、exit(0)
またはexit(EXIT_SUCCESS)
がプログラムの成功を示し、exit(EXIT_FAILURE)
が何らかのエラーを示すことのみを示しています。 (main
から値を返すことは、その値でexit
を呼び出すことと同等です。)Windows、Linux、OSXなどを含むほとんどの一般的なオペレーティングシステムは、成功に0を、1から255までの値を使用しますエラーを示します。エラーコードを選択するのはアプリケーション作成者次第であり、値11は特別なものではありません。
Linuxおよび他のほとんどのUnixバリアントでは、 signal 番号11は セグメンテーションフォールトを示します 、 Kerrek SB で述べられています。プログラムが何らかの無効なメモリアクセスを行うと、セグメンテーションフォールトが発生するため、範囲外の配列へのアクセス、ポインター演算のエラー、ヌルポインターへのアクセス試行、またはその他のポインター関連エラーのもっともらしい結果です。シグナル11は、終了コード11と同じものではありません。シグナルが原因でプログラムが終了すると、正常に終了したのではなく、シグナルによって強制終了されたとマークされます。 Unixシェルは、シグナル番号に128を加えた終了コードを報告することでシグナルを報告します。したがって、セグメンテーション違反の場合は139です。
他の回答は、「出口コード」というフレーズのあいまいさを逃しました。 「終了コード」が意味するのは、wait
ファミリーのシステムコールで取得したステータスコードのようです。
_/* assume a child process has already been created */
int status;
wait(&status);
printf("exit code %d\n", status);
_
そのようなことをすると、子プロセスがセグメンテーション違反を起こした場合に「終了コード11」が表示される可能性があります。子プロセスが実際にexit(11)
を呼び出した場合、代わりに「終了コード2816」が表示される場合があります。
Exitに渡される値との混乱を避けるために、これらのことを「exit code」ではなく「wait code」または「wait status」と呼ぶ方がよいでしょう。待機コードには、単一の整数にまとめられたいくつかの情報が含まれています。通常、整数を直接見ないでください(上記のprintf
で行ったように)。代わりに、_W*
_の_<sys/wait.h>
_マクロを使用して分析する必要があります。
_WIF*
_マクロから始めて、何が起こったかkindを見つけ、その情報を使用して、詳細を取得するために使用する他の_W*
_マクロを決定します。
_if(WIFEXITED(status)) {
/* The child process exited normally */
printf("Exit value %d\n", WEXITSTATUS(status));
} else if(WIFSIGNALED(status)) {
/* The child process was killed by a signal. Note the use of strsignal
to make the output human-readable. */
printf("Killed by %s\n", strsignal(WTERMSIG(status)));
} else {
/* ... you might want to handle "stopped" or "continued" events here */
}
_
特定の状況でアプリケーションが設定する必要がある終了コードを定義した標準はありません。どの終了コードがどのエラーまたは成功さえ表すかは、完全にプログラマー次第です!
プログラマは、ゼロ以外の値がエラーを示すと判断する場合があり、この値がオペレーティングシステムのエラーコードと等しい場合があります。
Windowsでは、ファイルの問題のため、終了コード11 mightを使用します。このエラーコードの説明が必要な場合(これはWindowsに固有であり、必ずしもアプリケーションではありません)net helpmsg 11
。