标签:unix exit函数 _exit函数 atexit函数 on_exit函数
摘要:本文主要讲述进程的终止方式,以及如何使用exit()函数来终止进程,回收进程用户空间资源;分析了exit()函数与_exit()函数,return关键字的差异.同时详细解读了如何使用atexit()和on_exit()函数来注册终止处理程序.#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int fun()
{
printf("fun\n");
sleep(1);
//读者切换调用,体会一下
//return 0;
exit(0);
}
int main()
{
int i;
i++;
printf("i = %d \n",i);
while(1)
fun();
return 0;
}
在上面这个例子中,我们看到如果在子函数中使用exit(),则循环只执行一次;如果在子函数中使用return关键字,则死循环将一直执行下去.
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("output\n");
printf("content int buffer"); //不带\n
//_exit(0); //只输出output,没有清理缓冲区(没刷新)
exit(0); //改为此句,将输出content int buffer
//return 0;
}
由例子2可以看出,_exit()调用退出时,没有清理刷新缓冲区.终止一个程序时,_exit()立即进入内核,而exit()则先要执行一些清理处理程序.
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
static void my_exit1();
static void my_exit2();
int main()
{
int i=0;
if(atexit(my_exit2)!=0)
{
printf("can't register my_exit2");
}
for(i=0; i<3; i++)
{
if(atexit(my_exit1)!=0)
{
printf("can't register my_exit1");
}
}
printf("main exiting....\n");
return 0;
//exit(0);//同return 0;
//_exit(0);//这个就不同了
}
static void my_exit1()
{
printf("first exit handler...\n");
}
static void my_exit2()
{
printf("second exit handler...\n");
}
输出:
:main exiting....#include <stdio.h>
#include <stdlib.h>
static void test_exit(int status,void *arg);
int main()
{
char *str = "How to use on_exit function...\n";
on_exit(test_exit,(void *)str);
exit(1314);
//return 520;
}
static void test_exit(int status,void *arg)
{
printf("before exit()!\n");
printf("exit:%d\n",status);
printf("arg=%s\n",(char *)arg);
}
输出:
:before exit()!#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
static void my_exit1();
static void my_exit2();
static void my_exit3();
int main()
{
int i=0;
if(atexit(my_exit2)!=0)
{
printf("can't register my_exit2\n");
}
//新增加的部分
if(atexit(my_exit3)!=0)
{
printf("can't register my_exit3\n");
}
for(i=0; i<3; i++)
{
if(atexit(my_exit1)!=0)
{
printf("can't register my_exit1\n");
}
}
printf("main exiting....\n");
//return 0;
exit(0);
//_exit(0);
}
static void my_exit1()
{
printf("first exit handler...\n");
}
static void my_exit2()
{
printf("second exit handler...\n");
}
static void my_exit3()
{
printf("three exit handler...\n");
_exit(0);//注意这里了.加了_exit(0);
}
输出:
: main exiting...._exit()和_Exit()等价,任何时候.
参考阅读:
[1] exit()函数使用说明.http://blog.csdn.net/u010006102/article/details/39737155.
[2] _exit()函数使用说明.http://blog.csdn.net/u010006102/article/details/39740101.
[3] atexit()函数使用说明.http://blog.csdn.net/u010006102/article/details/39740071.
[4] on_exit()函数使用说明.http://blog.csdn.net/u010006102/article/details/39740021.
笔者:个人能力有限,只是学习参考...读者若发现文中错误,敬请提出.
回收进程用户空间资源 exit()函数 _exit()函数 atexit()函数 on_exit()函数
标签:unix exit函数 _exit函数 atexit函数 on_exit函数
原文地址:http://blog.csdn.net/u010006102/article/details/39754817