【Linux C】进程环境

来源:互联网 发布:分治算法时间复杂度 编辑:程序博客网 时间:2024/06/05 15:34

1.         程序加载的简单过程:

a)        读取目标文件头部信息,找出需要多少地址空间。

b)        分配地址空间,如果有独立段,则讲地址空间按独立划分。

c)        程序读入地址空间段。

d)        程序末尾的bss空间填充为零。

e)        创建堆栈段。

f)         设置程序参数环境变量等信息。

g)        开始运行程序。

2.        进程退出3种方式:进程资源退出(return、exit)、进程收到信号退出、异常操作退出。

3.        Linux环境下最多可以设置32个进程终止处理函数。进程终止处理函数按照设置顺序的相反顺序执行。

4.        代码段是进程的指令部分,是只读的。

5.        数据段存储给定初值的全局变量和静态变量。程序运行过程中,该段大小不变。

6.        堆栈段存储自动变量,以及函数调用时需要保存的信息(返回地址、调用前各寄存器现场)。

7.        堆用于存储用户申请空间。系统在堆中进行动态分配内存。

8.        简单常量随着指令一起存储在代码段。复杂常量存储在.rodata段,其首地址作为简单变量存储,避免代码段过大。

9.        新进程执行时,命令行参数和环境变量是从父进程获得,命令行参数作为main函数参数获得,环境变量作为全局变量获得。

10.    命令行参数的第一个是程序的路径名。

11.    命令行参数表和环境变量表都是指针数组。

12.    Getenv()函数得到一个环境变量。Putenv()设置一个环境变量,setenv()环境变量赋值。Unsetenv()删除环境变量。

13.    $?为shell内置变量,表示最近一次运行进程的返回值。当程序从main函数结束,$?为main函数返回值。若调用exit则为exit的返回值。若异常退出则为异常出错的错误号。

14.    Errno全局变量调试出错信息。

15.    Longjmp,setjmp借助操作系统实现程序的全局跳转。

0 0
原创粉丝点击