进程环境 知识点汇总《APUE》 chapter-7

提问形式复习进程环境的相关知识点
原文链接:http://blog.csdn.net/feather_wch/article/details/50722815

1-main的调用过程?

C程序是有kernel调用exec程序之一来调用的。在main函数之前存在着特殊的启动函数(start-up)。启动函数被设置为程序的开始地址。这是由link editor设置的。

2-启动程序的作用?

用于从kernel(内核)获得一些值,如获得了命令行参数(command-line argument)和环境(environment)

3-进程终止的几种办法

一般的终止方式:
1. 从main return
2. 调用exit
3. 调用_Exit, _exit
4. 开始程序的最后一个线程 return
5. 在最后一个线程调用 pthread_exit

异常的终止方式:
6. 调用abort
7. 接收到信号
8. Response of the last thread to a cancellation request(11.5 and 12.7)

4- _exit, _Exit和exit的区别?

exit会先进行清除工作,再返回到kernel(例如会调用fclose关系所有打开的流,所有缓冲的输出数据都会flush)
_exit, _Exit会立即返回到kernel

5-exit handler是什么?如何设置?

Exit handler:就是exit自动调用的函数
可以通过atexit进行注册。

6- 程序如何开始和结束的流程:

内核通过exec执行程序,程序第一段执行的内容是C启动程序,该启动程序用于从kernel获得命令行参数和环境,然后启动程序调用main执行。结束的时候,可以通过_exit和_Exit直接返回kernel;也可以通过调用exit来调用exit handlers进行相应的清理工作,最后再返回kernel

7- environment list是什么?environ是什么?

字符指针的数组
environ是全局变量

8-C程序的五个组成部分,各部分作用?(高地址额外有命令行参数和变量)

  1. text
  2. intialized data
  3. uninitialized data(bss)
  4. stack
  5. heap

9-共享库的作用?优缺点

共享库移除了可执行文件中共同的库程序(library routines),在内存中存放着library routine的copy,任何进程都可以调用。

优点:1. 减少可执行文件的尺寸 2. 库程序可以直接用新版本替换,而不需要重新连接每个使用该库的程序(前提是:参数类型和数量不变)
缺点:程序第一次调用,或者该库程序第一次调用的时候,会有额外的时间消耗

10-内存分配有哪些库函数

malloc/calloc/realloc/alloca

11- alloca和malloc的不同

malloc是从heap分配的空间
alloca是从当前函数的stack frame分配的空间

12-alloca的优缺点:

优点:能自动释放空间
缺点:一些系统不支持alloca,这样的系统调用alloca无作用

13-什么是环境变量?

环境字符串例如name=value的形式,例如环境变量HOME 和 USER

14-环境变量的作用

HOME or USER 在登陆时自动被设置
可以在shell的启动文件里面设置环境变量来控制shell的操作
又如环境变量MAILPATH能告知shell哪里能找到mail

15-环境变量的操作函数(getenv/putenv/setenv/unsetenv)的作用

链接7.9:http://blog.csdn.net/feather_wch/article/details/50740004

16-putenv和setenv的区别

见链接7.9

17-环境变量相关注意点

  1. 我们应该总是使用getenv来获取环境的特殊值,而不是直接访问environ
  2. 下章我们会知道我们可以仅仅影响当前进程和其子进程的环境
  3. 我们不能影响父进程的环境,父进程经常是shell
  4. 环境变量删除容易,增加难(栈上面存放环境变量的空间是无法扩充的

18-修改、增加环境变量的几种情况

见链接7.9

19-stack frame是什么?C中stack frames用什么实现的?

每个function中的自动变量都保存在stack frame中

系统内部并有没有支持stack的硬件,C的实现可能会使用链表来实现stack frames

20-setjmp和longjmp的作用

在不同function之间实现goto label的功能。

21-调用上面两个函数,如何不让变量值回退?

变量为volatile变量或者static变量

22- 编写使用非局部跳转的可移植性代码必须使用volatile

23- 使用自动变量的潜在问题

自动变量被释放后,依然会被引用,比如函数返回了内部变量的地址。

24- getrlimit和setrlimit的作用

25- 资源限制如何得到的?

系统资源限制是系统启动时由进程0设置的,且由后续的进程继承。

26- 改变资源限制的三个准则

  • 进程的软限制(soft limit)需要小于等于硬限制(hard limit)
  • 进程可以降低其硬限制,以大于等于soft limit。注意:降低硬限制对一般用户不可逆!
  • 仅仅超级用户进程(superuser process)可以提高硬限制

你可能感兴趣的:(Linux,C)