Linux提供了几个退出进程相关的函数exit()、_exit()、atexit()和on_exit()。exit()函数的作用是退出当前进程,并且尽可能释放当前进程占用的资源。_exit()函数作用也是退出当前进程,但是并不试图释放进程占用的资源。atexit()函数的和on_exit()函数的作用都是为程序退出时指定调用用户的代码,区别在于on_exit()函数可以为设定的用户函数设定参数。这几个函数的定义如下:
#include <stdlib.h>
int atexit(void (*function)(void));
int on_exit(void (*function)(int , void *), void *arg);
void exit(int status);
#include <unistd.h>
void _exit(int status);
%提示:atexit()函数可以给一个程序设置多个退出时调用的函数,atexit()函数是按照栈方式向系统注册的,所以后注册的函数会先调用。
实例8-4 函数退出回调函数例程
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4
5 void bye(void) // 退出时回调的函数
6 {
7 printf("That was all, folks/n");
8 }
9
10 void bye1(void) // 退出时回调的函数
11 {
12 printf("This should called first!/n");
13 }
14
15 int main()
16 {
17 long a;
18 int i;
19
20 i = atexit(bye); // 设置退出回调函数并检查返回结果
21 if (i != 0) {
22 fprintf(stderr, "cannot set exit function bye/n");
23 return EXIT_FAILURE;
24 }
25
26 i = atexit(bye1); // 设置退出回调函数并检查返回结果
27 if (i!=0) {
28 fprintf(stderr, "cannot set exit function bye1/n");
29 return EXIT_FAILURE;
30 }
31
32 return EXIT_SUCCESS;
33 }
34
程序通过atexit()函数设置了两个退出时调用的函数bye()和bye1(),按照atexit()函数注册的特点,bye1()函数最后注册的会被先执行,程序的运行结果如下:
This should called first!
That was all, folks
从程序结果可以看到,bye1()函数先被执行了。