__exit() exit() return的区别
_exit() --- 直接结束进程进入到内核中
exit() --- 清理I/O缓冲区后再退出进程
return --- 函数返回
【实例】
__exit():
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4
5 int main()
6 {
7 int ret = 0;
8 printf("I'm ok!
");
9 printf("Good good study!");
10
11 _exit(0);
12 }
执行结果:
I'm ok!
【实例】
exit()
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4
5 int main()
6 {
7 int ret = 0;
8 printf("I'm ok!
");
9 printf("Good good study!");
10
11 exit(0);
12 }
执行结果:
I'm ok! Good good study!
当把第二个输出信息后面加一个" ";两个程序的结果都会输出相同的结果,两个打印信息都会打印出来。
原因如下:
printf函数就是使用的是缓冲I/O的方式,该函数在遇到“ “换行符时自动的从缓冲区中将记录读出。所以exit()将缓冲区的数据写完后才能退出来,所以调用exit()函数后程序并不会马上退出,这就是有些出现的僵尸程序,而_exit是直接退出进入到内核中去。
总的来说_exit()执行后会立即返回给内核,而exit()会先执行一些清除操作然后将控制权交给内核,就是说在调用_exit函数的时候它会关闭所有的文件描述符,清理内存和其他的一些内核清理函数,但是不会刷新(stdin,stdout,stderr...),而exit就是在调用_exit()函数的前面先刷新流。
注:
1、return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束
2、return是返回函数调用,如果返回的是main函数,则为退出程序
3、exit是在调用处强行退出程序,运行一次程序就结束