进程的终止方式:
有8种方式使进程终止,其中前5种为正常终止,它们是
1:从 main 返回
2:调用 exit
3:调用 _exit 或 _Exit
4:最后一个线程从其启动例程返回
5:最后一个线程调用pthread_exit
异常终止有3种,它们是
6:调用 abort
7:接到一个信号并终止
8:最后一个线程对取消请求做出响应
exit()函数整个过程:
1、调用atexit()注册的函数(出口函数)
2、cleanup();关闭所有打开的流
3、最后调用_exit()函数终止进程。
_exit做3件事(man):
1,Any open file descriptors belonging to the process are closed
2,any children of the process are inherited by process 1, init
3,the process’s parent is sent a SIGCHLD signal
exit执行完清理工作后就调用_exit来终止进程。
这就应该先说一下这个atexit()函数的功能了。
这是一个注册函数,一个进程注册至少32个的函数。
需要注意的是,调用的顺序和登记时的顺序刚好是相反的,可以看下面一段代码: