进程管理之 atexit()函数

一个进程可以登记若干个函数,这些函数由exit()自动调用,这些函数被称为终止处理函数,atexit函数可以登记这些函数。如果一个函数被多次登记,也会被多次调用。
举一个例子:
#include<stdio.h>
#include<stdlib.h>

void fun()
{
    printf("This is fun!\n");
}

int main()
{
    atexit(fun);

    exit(0);
}
这个代码先注册了一个函数fun(),之后在遇到了exit(0)函数时就会自动调用。现象:
![现象](http://img.blog.csdn.net/20160625225002985)

那么假如我在代码里面注册了好几函数的话,遇到exit()的时候会先调用哪一个函数呢?就让我们来试一试:
#include<stdio.h>
#include<stdlib.h>

void fun1()
{
    printf("This fun1!\n");
}

void fun2()
{
    printf("This fun2!\n");
}

void fun3()
{
    printf("This fun3!\n");
}

int main()
{
    atexit(fun1);
    atexit(fun2);
    atexit(fun3);
    exit(0);
    return 0;
}
在这段代码中我们注册了三个函数,在最后遇到exit()之时,情况是这样的:
![现象](http://img.blog.csdn.net/20160625224934280)
很明显首先调用的是fun3(),之后是fun2(),最后是fun1()。这说明atexit()的注册顺序和调用顺序是相反的!

你可能感兴趣的:(函数,printf,管理)