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。进程也可非自愿的由一个信号使其终止。
演示:
-
#include <stdio.h>
-
#include <stdlib.h>
-
-
static void my_exit1(void);
-
static void my_exit2(void);
-
-
int main()
-
{
-
if(atexit(my_exit2) != 0)
-
printf("can't register my_exit2\n");
-
if(atexit(my_exit1) != 0)
-
printf("can't register my_exit1\n");
-
if(atexit(my_exit1) != 0)
-
printf("can't register my_exit1\n");
-
-
printf("main is done\n");
-
return 0;
-
}
-
-
static void my_exit1(void)
-
{
-
printf("first exit hander!\n");
-
}
-
-
static void my_exit2(void)
-
{
-
printf("second exit hander!\n");
-
}
-
$ ./atexit
-
main is done
-
first exit
-
first exit
-
second exit
阅读(1492) | 评论(0) | 转发(0) |