8.1.5 退出进程

8.1.5  退出进程

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()函数先被执行了。

你可能感兴趣的:(8.1.5 退出进程)