进程环境-C程序的启动和终止

    360面试回来了,结果是好的,面上了。技术面让我在校多补补多进程和多线程,所以开始看Unix环境高级编程,所以这里的都是看书的一个大致总结,很多都是书上的内容。

    一:main如何被调用

        1.内核执行C程序

        2.调用启动例程,从内核获取命令行参数和环境变量

        3.调用main

        其实main之前的操作时很复杂的,栈和BSS的初始化,库的初始化。之前看过一篇文章,有兴趣的可以百度,这里我们只要只要main之前有一个启动例程被调用,而且启动例程把命令行参数和环境变量传递给main函数并调用。

   二:进程的终止

      启动例程调用main后,那么自己什么时候结束呢?linux中提供三个函数,可以正常的终止一个进程。分别是void exit(int),void _exit(int),void _Exit(int)。第一个是库函数,后面两个是系统调用。每个带有一个参数,这个参数也称为终止状态。

        exit(int)被调用后

            1.调用每个终止处理函数

            2.关闭所有打开的流

            3.调用_exit(int)/_Exit()

            终止处理函数:

                调用exit结束一个进程时,首先去执行那个终止处理函数。我们可以通过void atexit(void (*func)(void))登记终止处理函数,终止函数的执行顺序与登记的顺序相反,如果一个函数多级登记,也会多次调用。

        _exit(int)/_Exit(int)

            清除进程使用的内存,销毁进程在内核中的数据结构。

最后,通过一个经典的图总结C程序如何启动,以及怎样终止



猜你喜欢

转载自blog.csdn.net/king_qg/article/details/80449684