内核使程序执行的唯一方法,就是调用exec函数,这个函数又会启动一个C程序启动例程,这个启动例程是C程序的启动地址。负责调用main函数,并接受mainn函数的返回值。
使得进程结束的唯一方式是隐式的_exit/_Exit,通过调用exit(C函数),会执行在atexit中注册的结束处理程序,并关闭所有的打开流,最后调用-exit结束进程。
或者是受到进程结束信号。
在C中
exit(0)<==>return 0
进程结束有8种方式
5种正常
main函数返回 return
exit()
_exit()
最后一个线程的历程结束返回,在线程执行return 值后,进程最终返回0
最后一个线程调用pthread_exit返回,进程最终返回0
3种异常
abort()
收到信号
最后一个线程对取消请求作出响应
========
当一个进程在结束之后,会遍历所有进程,如果是子进程,改变父进程为1进程。
进程结束后,系统会为进程保留一些信息,需要父进程去获得终止状态(wait/waitid),进行收尾处理。
如果父进程没有获得终止状态,并且没有对子进程遗留信息进行处理,那么子进程变为僵尸进层。