[UNIX.API]一个c程序在Unix系统中是如何启动和终止的?
一个c程序的入口函数总是main函数,用户在用户空间执行这个c程序后,将会引起系统调用,kernel调用exec函数,将具体main函数的某些信息作为参数传给exec,由exec函数启动这个main函数,main函数执行完后,如果单线程,则有两种方式终止,(1)调用exit函数(return)。(2)调用 _exit(POSIX)函数或者_Exit函数(ISO C)。两者的区别在于,2只是直接返回kernel,而1会做一些清理工作。1的清理工作主要包括三部分,(a)调用exit handler;(b)调用fclose等函数关闭与I/O库的联系;(c)调用_exit或者_Exit函数。其中的exit handler需要用户自己定义并在退出函数之前用atexit函数注册,然后在exit函数(return)中被自动执行,执行顺序与注册顺序相反。