chapter 7 进程环境

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

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

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

  • 进程退出的8种方式


    chapter 7 进程环境_第1张图片
    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 进程环境)