Chinaunix首页 | 论坛 | 博客
  • 博客访问: 349121
  • 博文数量: 60
  • 博客积分: 1570
  • 博客等级: 上尉
  • 技术积分: 620
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-02 23:37
文章分类

全部博文(60)

文章存档

2012年(2)

2010年(2)

2009年(56)

分类: LINUX

2009-11-26 23:10:02

1. 进程终止方式:
有 8 种方式使进程终止(termination),其中 5 种为正常终止,他们是
 (1)从 main 函数返回。
 (2)调用 exit。
 (3)调用 _exit 或 _Exit。
 (4)最后一个线程从其启动例程返回。
 (5)最后一个线程调用 pthread_exit。
 
异常终止有 3 种方式,它们是
 (6)调用 abort。
 (7)接到一个信号并终止。
 (8)最后一个线程对取消请求做出响应。
 
2. exit、 _Exit 和 _exit 函数。
    这三个函数用于正常终止一个程序:_exit 和 _Exit 立即进入内核, exit 则先执行一些清理处理(包括调用执行各终止处理程序(exit handler), 清理和关闭所有标准I/O 流等),然后进入内核。

#include <stdlib.h> /* ISO C 中说明 */
        void exit(int status);
        void _Exit(int status);

#include <unistd.h> /* POSIX.1 中说明 */
        void _exit(int status);


3. atexit 函数。

   按照 ISO C 的规定,一个进程可以登记多达32个函数,这些函数将由 exit 自动调用。一般称这些函数为终止处理程序(exit handler),并调用 atexit 函数来登记这些函数。

#include <stdlib.h>
int atexit(void (*func)(void));
                                 Returns: 0 if OK, nonzero on error

exit 调用这些函数的顺序与它们登记时候的顺序相反。同一个函数如若登记多次,则也会被调用多次。

4. 一个 C 程序的启动和停止:

    根据 ISO C 和 POSIX.1 , exit 首先调用各终止处理程序,然后按需多次调用 fclose,关闭所有打开流。POSIX.1 扩展了ISO C标准,它指定如若程序调用 exec 函数族中的任一函数,则将清除所有已安装的终止处理程序。

下图显示了一个 C 程序是如何启动的,以及它可以终止的各种方式。

 

注意: 内核是程序执行的唯一方法是调用一个exec 函数。进程自愿终止的唯一方式是显示或隐式地(通过调用 exit)调用_exit 或 _Exit。进程也可非自愿地由一个信号使其终止(上图中没有显示)。

 

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