exit()函数详解与Exit() 和 Return() 的区别
生活随笔
收集整理的這篇文章主要介紹了
exit()函数详解与Exit() 和 Return() 的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
exit(0) 表示程序正常, exit(1)/exit(-1)表示程序異常退出
exit() 結束當前進程/當前程序/,在整個程序中,只要調用 exit ,就結束
return() 是當前函數返回,當然如果是在主函數main, 自然也就結束當前進程了,如果不是,那就是退回上一層調用。在多個進程時.如果有時要檢測上進程是否正常退出的.就要用到上個進程的返回值..
exit(1)表示進程正常退出. 返回 1;
exit(0)表示進程非正常退出. 返回 0.
進程環境與進程控制(1): 進程的開始與終止
1. 進程的開始:
C程序是從main函數開始執行, 原型如下:
int main(int argc, char *argv[]);
通常main的返回值是int型, 正確返回0.
如果main的返回值為void或者無, 某些編譯器會給出警告, 此時main的返回值通常是0.
關于main的命令行參數不做過多解釋, 以下面的程序展示一下:
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
for (i = 0; i < argc; i++)
printf("argv[%d]: %s\n", i, argv[i]);
return 0;
}
2. 進程終止:
C程序的終止分為兩種: 正常終止和異常終止.
正常終止分為: return, exit, _exit, _Exit, pthreade_exit
異常中指分為: abort, SIGNAL, 線程響應取消
主要說一下正常終止的前4種, 即exit系列函數.
#include <stdlib.h> /* ISO C */
void exit(int status);
void _Exit(int status);
#include <unistd.h> /* POSIX */
void _exit(int status);
以上3個函數的區別是:
exit()(或return 0)會調用終止處理程序和用戶空間的標準I/O清理程序(如fclose), _exit和_Exit不調用而直接由內核接管進行清
理.
因此, 在main函數中exit(0)等價于return 0.
3. atexit終止處理程序:
ISO C規定, 一個進程最對可登記32個終止處理函數, 這些函數由exit按登記相反的順序自動調用. 如果同一函數登記多次, 也會被
調用多次.
原型如下:
#include <stdlib.h>
int atexit(void (*func)(void));
其中參數是一個函數指針, 指向終止處理函數, 該函數無參無返回值.
以下面的程序為例:
#include <stdlib.h>
static void myexit1()
{
printf("first exit handler\n");
}
static void myexit2()
{
printf("second exit handler\n");
}
int main()
{
if (atexit(my_exit2) != 0)
printf("can't register my_exit2\n");
if (atexit(my_exit1) != 0)
printf("can't register my_exit1\n");
if (atexit(my_exit1) != 0)
printf("can't register my_exit1\n");
printf("main is done\n");
return 0;
}
運行結果:
$ ./a.out
main is done
first exit handler
first exit handler
second exit handler運行結果:
$./a.out arg1 arg2 arg3
argv[0]: ./a.out
argv[1]: arg1
argv[2]: arg2
argv[3]: arg3
exit() 結束當前進程/當前程序/,在整個程序中,只要調用 exit ,就結束
return() 是當前函數返回,當然如果是在主函數main, 自然也就結束當前進程了,如果不是,那就是退回上一層調用。在多個進程時.如果有時要檢測上進程是否正常退出的.就要用到上個進程的返回值..
exit(1)表示進程正常退出. 返回 1;
exit(0)表示進程非正常退出. 返回 0.
進程環境與進程控制(1): 進程的開始與終止
1. 進程的開始:
C程序是從main函數開始執行, 原型如下:
int main(int argc, char *argv[]);
通常main的返回值是int型, 正確返回0.
如果main的返回值為void或者無, 某些編譯器會給出警告, 此時main的返回值通常是0.
關于main的命令行參數不做過多解釋, 以下面的程序展示一下:
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
for (i = 0; i < argc; i++)
printf("argv[%d]: %s\n", i, argv[i]);
return 0;
}
2. 進程終止:
C程序的終止分為兩種: 正常終止和異常終止.
正常終止分為: return, exit, _exit, _Exit, pthreade_exit
異常中指分為: abort, SIGNAL, 線程響應取消
主要說一下正常終止的前4種, 即exit系列函數.
#include <stdlib.h> /* ISO C */
void exit(int status);
void _Exit(int status);
#include <unistd.h> /* POSIX */
void _exit(int status);
以上3個函數的區別是:
exit()(或return 0)會調用終止處理程序和用戶空間的標準I/O清理程序(如fclose), _exit和_Exit不調用而直接由內核接管進行清
理.
因此, 在main函數中exit(0)等價于return 0.
3. atexit終止處理程序:
ISO C規定, 一個進程最對可登記32個終止處理函數, 這些函數由exit按登記相反的順序自動調用. 如果同一函數登記多次, 也會被
調用多次.
原型如下:
#include <stdlib.h>
int atexit(void (*func)(void));
其中參數是一個函數指針, 指向終止處理函數, 該函數無參無返回值.
以下面的程序為例:
#include <stdlib.h>
static void myexit1()
{
printf("first exit handler\n");
}
static void myexit2()
{
printf("second exit handler\n");
}
int main()
{
if (atexit(my_exit2) != 0)
printf("can't register my_exit2\n");
if (atexit(my_exit1) != 0)
printf("can't register my_exit1\n");
if (atexit(my_exit1) != 0)
printf("can't register my_exit1\n");
printf("main is done\n");
return 0;
}
運行結果:
$ ./a.out
main is done
first exit handler
first exit handler
second exit handler運行結果:
$./a.out arg1 arg2 arg3
argv[0]: ./a.out
argv[1]: arg1
argv[2]: arg2
argv[3]: arg3
轉載于:https://blog.51cto.com/sysmw/395033
總結
以上是生活随笔為你收集整理的exit()函数详解与Exit() 和 Return() 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 删除SQL Server注册
- 下一篇: WebPart(汇总)[转载]