Chinaunix首页 | 论坛 | 博客
  • 博客访问: 594954
  • 博文数量: 66
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1810
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-23 13:53
个人简介

linux

文章分类

全部博文(66)

文章存档

2016年(1)

2015年(14)

2014年(32)

2013年(19)

分类: C/C++

2014-12-04 14:58:20

1.进程终止
有五种状态使进程终止:
(1)正常终止:
        a)从main返回
        b)调用exit
        c)调用_exit
(2)异常终止:
        a)调用abort
        b)由一个信号终止
2.atexit
ANSI C规定,一个进程可以登记至多32个函数,这些函数将由exit自动调用。称这些函数
为终止处理程序,并用atexit函数来登记这些函数。
    #include
    int atexit(void (*func)(void));

    其中,atexit的参数是一个函数地址, 当调用此函数是无需向他传入任何参数,
    也不期望返回一个值,exit以登记这些函数的相反顺序调用它们。同一个函数可以
    登记多次,则也被调用多次。

    exit首先调用各终止处理程序,然后按需要多次调用fclose,关闭所有打开的流。
    下图显示一个C程序是如何启动的,以及它终止的各种方式。
    

    内核使程序执行的唯一方法是调用一个exec函数。进程自愿终止的唯一方法是显示
    或隐式(调用exit)调用_exit。进程也可非自愿的由一个信号使其终止。

演示:
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. static void my_exit1(void);
  4. static void my_exit2(void);

  5. int main()
  6. {
  7.         if(atexit(my_exit2) != 0)
  8.                 printf("can't register my_exit2\n");
  9.         if(atexit(my_exit1) != 0)
  10.                 printf("can't register my_exit1\n");
  11.         if(atexit(my_exit1) != 0)
  12.                 printf("can't register my_exit1\n");

  13.         printf("main is done\n");
  14.         return 0;
  15. }

  16. static void my_exit1(void)
  17. {
  18.         printf("first exit hander!\n");
  19. }

  20. static void my_exit2(void)
  21. {
  22.         printf("second exit hander!\n");
  23. }
  1. $ ./atexit
  2. main is done
  3. first exit
  4. first exit
  5. second exit



阅读(1426) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~