chapter 7 进程环境

作者: 小鲍比大爷 | 来源:发表于2019-05-13 14:06 被阅读0次

    关键字:main函数运行、程序终止和回调注册、环境变量与环境表、c程序存储空间布局、longjmp、资源限制

    • main函数调用的实现是c编译器帮忙实现的,c编译器在我们的main函数之前加入了内置好的启动程序,这个启动程序从内核取得命令行参数和环境变量。启动程序如果用c代码类似如下这样:
    exit(main(argc, argv))
    

    但一般启动程序使用汇编编写

    • 进程退出的8种方式


      image.png
    • exit(0)等价于return(0)
    • atexit可以用来注册exit handler,本质就是注册程序结束前需要执行的回调函数,需要注意的是:函数注册顺序与执行顺序相反;同一函数注册多次,那么也会执行多次
    • 内核使程序执行的唯一方法是调用一个exec函数,进程自愿终止的唯一方法是执行exit系列的函数
    • ISO C 和 POSIX.1都要求argv[argc]为一个空指针
    • environ全局变量保存所有的环境变量,但是一般使用getenv和putenv函数操作环境变量。environ指向一张环境表
    • size命令可以报告正文段,数据段和bss段的长度,dec和hex分别为十进制和是十六进制的三段的总长度
    [root@localhost include]# size /bin/sh
       text    data     bss     dec     hex filename
     903323   35984   22920  962227   eaeb3 /bin/sh
    
    • setjmp/longjmp,支持跨函数返回,抛弃当前栈帧,恢复setjmp时的栈状态
    • longjump跳转时,只有volatile变量不会恢复到之前的值,所以在这个场景,可移植程序必须使用volatile变量
    • 自动变量的潜在问题:栈上分配的临时变量在返回后不能继续使用,如果要实现这种需求,需要指定为全局变量或者在堆上分配
    • 资源限制影响到调用进程并由子进程继承,这就意味着,为了影响一个用户的所有后续进程,需将资源限制的设置构造在shell之中(ulimit命令,getrlimit和setrlimit方法)

    相关文章

      网友评论

        本文标题:chapter 7 进程环境

        本文链接:https://www.haomeiwen.com/subject/meuaoqtx.html