进程的退出

#include <stdio.h>
#include <stdlib.h>

static void atexitFunc1(void) {
    printf("atexit function 1 called.
");
}

static void atexitFunc2(void) {
    printf("atexit function 2 called.
");
}

static void onexitFunc(int exitStatus, void *arg) {
    printf("on_exit function called: status=%d, arg=%ld
", exitStatus, (long)arg);
}

int main() {
    if(on_exit(onexitFunc, (void*)10)!=0) {
        printf("on_exit 1");
        return -1;
    }
    if(atexit(atexitFunc1) != 0) {
        printf("atexit 1");
        return -1;
    }
    if(atexit(atexitFunc2) != 0) {
        printf("atexit 2");
        return -1;
    }
    if(on_exit(onexitFunc, (void*)20) != 0) {
        printf("on_exit 2");
        return -1;
    }

    return 0;
}

在进程终止之前,C库会按顺序执行以下关闭进程的步骤。

1)调用任何由atexit()或on_exit()注册的函数,和在系统中注册时顺序相反。

2)清空所有已打开的标准I/O流。

3)删除由tmpfile()函数创建的所有临时文件。

原文地址:https://www.cnblogs.com/donggongdechen/p/15009275.html