4

次のコードを検討してください。

#include <stdio.h>

int main()
{
    int x;
    printf ("\nEnter x: ");
    scanf ("%d", &x);

    return x;
}

Output:
$Enter x: -2

$echo $?
254

私の質問は:

OS は、プロセス P (上記の実行中のコード) を実行することにより、main() の戻り値が NON-ZERO であることを認識します。

そのような場合、OSは何らかの処理を行いますか?

4

3 に答える 3

4

ここでの「オペレーティングシステム」によって、あなたが何を理解しているのかを明確にする必要があります。

シェルの観点から見ると(通常、カーネル自体の一部ではなく、通常は別のユーザースペースプログラムです)、プロセスの終了値は式の値を評価するために使用され、シェルを実行するときに重要です。プロセスの終了後に行う最も自然なチェックであるため、プログラミング。

カーネルの観点からは、プロセスの終了値はほとんど無視されます。カーネルは、返された終了コードに関係なく、プロセス後にクリーンアップする必要があります。

于 2012-11-06T07:27:55.767 に答える
4

戻り値は、実際にはプログラムの完了状況を示しています。ゼロ以外の値は、プログラムが異常終了したことを示します。ステータスは他のプログラムで使用される可能性があるため、常に実際のステータスを返すことをお勧めします。

于 2012-11-06T07:20:56.317 に答える
1

通常、プログラムが「予想どおり」に実行されると、0 が返されます。実行すべきではないことが実行された場合は、エラーの種類に応じて非ゼロが返されます (これについては、errno マニュアルを参照してください)。現在、この戻り値は、プログラムが実行されていた「シェル」によって受け取られます。この戻り値には、「$?」を使用してアクセスできます。BASHで。したがって、それは純粋にプログラムに対するユーザーのアクセシビリティのためです(プログラムが正しく実行され、そうでない場合はエラーが何であるか)。この戻り値は、シェルスクリプトなどで使用して、再実行するかどうか、または管理者がやりたいことを決定するために使用できます。カーネルは、ユーザーランド プログラムをクリーンアップするだけです。

于 2012-11-06T23:07:08.920 に答える