_exit()执行后会立即返回,而exit()要先执行一些清除操作,比如刷新缓冲区,然后将控制权交给内核。
调用_exit()函数时,会关闭进程所有的文件描述符,清理内存,以及其他一些内核清理函数,但不会刷新流(stdin 、stdout、stderr……)。exit()函数是在_exit()函数上的一个封装,它会调用_exit,并在调用之前先刷新流。
exit()函数与_exit()函数最大的区别就在于,exit()函数在调用exit系统之前要检查文件的打开情况,把文件缓冲区的内容写回文件。
代码测试
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc, char *argv[])
{
int a = 100;
printf("a=%d ", a);
#if 0
exit(0);
#else
_exit(0);
#endif
printf("hello world\n");
return 0;
}
测试结果
执行exit() 函数可以打印出a的值,而执行_exit() 函数无法打印出a的值。