プロセス終了exit(0)とreturn 0の関係を浅く分析する
1500 ワード
前言:
exit()関数は、プログラムの実行中にいつでもプログラムを終了するために使用され、exitのパラメータstateはオペレーティングシステムに返され、0を返すとプログラムが正常に終了し、0を持たないとプログラムが正常に終了しないことを示します.main関数の終了時にもexit関数が暗黙的に呼び出されます.exit関数の実行時には、まずatexit()関数で登録された関数が実行され、その後、すべての出力ストリームをリフレッシュし、開いているすべてのストリームを閉じ、標準I/O関数tmpfile()で作成された一時ファイルを閉じ、最後に_exitシステム関数.
プロセス終了のシナリオは8種類あり、前の5種類は正常終了であり、後の3種類は異常終了である.
1 main関数から返す;
2 exit関数を適用する.
3用途変更_exitまたは_Exit;
4最後のスレッドは起動ルーチンから返される.
5最後のスレッドをpthread_に適用exit;
6 abort関数を適用する.
7信号を受信し、終了する.
8最後のスレッドは、キャンセル要求に応答します.
まとめ:
1.任意の場所でexit()を呼び出すと、プライマリ関数でも他の関数でもプロセス全体が終了します.
2.main()関数のみreturnはexit()を呼び出し、プロセス全体を終了させ、後の文は実行されません.
3.他の関数呼び出しreturnではexit()は呼び出されず、関数が戻って実行を続行します.
exit()関数は、プログラムの実行中にいつでもプログラムを終了するために使用され、exitのパラメータstateはオペレーティングシステムに返され、0を返すとプログラムが正常に終了し、0を持たないとプログラムが正常に終了しないことを示します.main関数の終了時にもexit関数が暗黙的に呼び出されます.exit関数の実行時には、まずatexit()関数で登録された関数が実行され、その後、すべての出力ストリームをリフレッシュし、開いているすべてのストリームを閉じ、標準I/O関数tmpfile()で作成された一時ファイルを閉じ、最後に_exitシステム関数.
プロセス終了のシナリオは8種類あり、前の5種類は正常終了であり、後の3種類は異常終了である.
1 main関数から返す;
2 exit関数を適用する.
3用途変更_exitまたは_Exit;
4最後のスレッドは起動ルーチンから返される.
5最後のスレッドをpthread_に適用exit;
6 abort関数を適用する.
7信号を受信し、終了する.
8最後のスレッドは、キャンセル要求に応答します.
/* : return 0*/
#include
int fun()
{
return 0;// return ,
}
int main()
{
fun();
printf("haha");
return 0;
}
: haha
/* : exit(0)*/
#include
#include
int fun()
{
exit(0);// exit() ,
}
int main()
{
fun();
printf("haha");
return 0;
}
: haha
/* : return 0*/
#include
#include
int main()
{
return 0; // return exit(0), ,
printf("haha");
}
: haha
まとめ:
1.任意の場所でexit()を呼び出すと、プライマリ関数でも他の関数でもプロセス全体が終了します.
2.main()関数のみreturnはexit()を呼び出し、プロセス全体を終了させ、後の文は実行されません.
3.他の関数呼び出しreturnではexit()は呼び出されず、関数が戻って実行を続行します.