标签:
平时一直在用exit()函数,但是今天看源码时竟然看到了_exit()函数,想知道它们的区别,所以就查查资料,写了下来!
#include<stdlib.h> void exit(int status);不像fork那么难理解,从exit的名字就能看出,这个系统调用是用来终止一个进程的。无论在程序中的什么位置,只要执行到exit系统调用,进程就会停止剩下的所有操作,清除包括PCB在内的各种数据结构,并终止本进程的运行。请看下面的程序:
#include<stdlib.h>
#include <stdio.h>
main()
{
printf("this process will exit!\n");
exit(0);//程序在次退出,不会再向下执行。
printf("never be displayed!\n");
}
运行结果:
我们在实际编程时,可以用wait系统调用接收子进程的返回值,从而针对不同的情况进行不同的处理。
linux下exit()和_exit()的用法及区别:
#include<unistd.h> void _exit(int status);(1)exit()函数定义在 stdlib.h中;而_exit()定义在unistd.h中,
#include<stdlib.h>
int main()
{
printf("output begin\n");
printf("content in buffer\n");
exit(0);//输出前两句,程序在次退出;
}
运行结果:#include<unistd.h>
int main()
{
printf("output begin\n");
printf("content in buffer");
_exit(0);//直接清空缓存空间,可能造成数据损失,不善后处理;
}运行结果:此时可以看出,_exit(0)函数直接退出清空数据,硬退出,而没有管缓冲区的数据,也没有写会文件或者对缓冲区的数据做善后处理,只输出了一句,第二句的数据丢失了,相反exit(0)则会对缓冲区的数据进行处理后终止,例如写会文件,打印等等一些后续。
标签:
原文地址:http://blog.csdn.net/gogokongyin/article/details/51339922