注意,本文说的是整个进程(一个进程可能包含多个线程)的退出。
一个进程的退出,有可能是由进程自己的用户态代码主动退出的,也可能是由内核通过信号处理机制(如SIGKILL、SIGABRT)强制执行的。
一、用户态主动退出
有如下多种途径,
直接main函数返回,
调用exit
调用_exit
调用exit_group
上面几种情况,
前两者等价(All functions registered with atexit(3) and on_exit(3) are called. All open stdio(3) streams are flushed and closed.),
后两者等价(Does not call any functions registered with atexit(3) or on_exit(3). Open stdio(3) streams are not flushed.)。
二、从内核态退出
程序因为异常,或者因为管理措施要被结束时,会收到相应的信号(如SIGKILL等),然后内核在信号处理过程中,就会将进程结束掉。
无论是哪种情况,最终都是殊途同归的走到内核态的do_group_exit函数中,进程退出的全部工作(从OS的角度),都是由此函数完成的。
未完......