父子进程的继承关系
子进程的特征:
子进程在自己的虚拟地址空间中执行,空间包括栈、堆和数据空间
– 子进程从父进程继承很多属性
– 子进程有自己唯一的进程ID
– 子进程的父进程ID是它的父进程的ID
– 子进程拥有父进程打开文件描述符的拷贝
– 子进程逝去处理器时间(elapsed processor)设为0
– 子进程的未决信号(pending signals)集合被清除
– 子进程继承它的阻塞信号的掩码(mask of blocked signals)和信号动作
(signal actions)
由子进程自父进程继承到:
- 进程的资格(真实(real)/有效(effective)/已保存(saved) 用户号(UIDs)和组号(GIDs))
- 环境(environment)
- 堆栈
- 内存
- 打开文件的描述符(注意对应的文件的位置由父子进程共享,这会引起含糊情况)
执行时关闭(close-on-exec) 标志 (译者注:close-on-exec标志可通过fnctl()对文件描述符设置,
POSIX.1要求所有目录流都必须在exec函数调用时关闭。更详细说明, 参见《UNIX环境高级编程》
W. R. Stevens, 1993, 尤晋元等译(以下简称《高级编程》), 3.13节和8.9节)- 信号(signal)控制设定
- nice值 (译者注:nice值由nice函数设定,该值表示进程的优先级,数值越小,优先级越高)
进程调度类别(scheduler class) (译者注:进程调度类别指进程在系统中被调度时所属的类别,
不同类别有不同优先级,根据进程调度类别和nice值,
进程调度程序可计算出每个进程的全局优先级(Global process prority),优先级高的进程优先执行)- 进程组号
- 对话期ID(Session ID) (译者注:译文取自《高级编程》,指:进程所属的对话期 (session)ID,
一个对话期包括一个或多个进程组, 更详细说明参见《高级编程》 9.5节)- 当前工作目录
- 根目录 (译者注:根目录不一定是“/”,它可由chroot函数改变)
- 文件方式创建屏蔽字(file mode creation mask (umask)) (译者注:译文取自《高级编程》,
指:创建新文件的缺省屏蔽字)- 资源限制
- 控制终端
子进程所独有:
- 进程号
不同的父进程号(译者注:即子进程的父进程号与父进程的父进程号不同, 父进程号可由getppid函数得到)- 自己的文件描述符和目录流的拷贝(译者注:目录流由opendir函数创建,因其为顺序读取,顾称“目录流”)
- 子进程不继承父进程的进程,正文(text),数据和其它锁定内存(memory locks)
(译者注:锁定内存指被锁定的虚拟内存页,锁定后, 不允许内核将其在必要时换出(page out),
详细说明参见《The GNU C Library Reference Manual》 2.2版, 1999, 3.4.2节)- 在tms结构中的系统时间(译者注:tms结构可由times函数获得,它保存四个数据用于记录进程使用
中央处理器 (CPU:Central Processing Unit)的时间,包括:用户时间,系统时间,用户各子进程合
计时间,系统各子进程合计时间)- 资源使用(resource utilizations)设定为0
- 阻塞信号集初始化为空集(译者注:原文此处不明确,译文根据fork函数手册页稍做修改)
- 不继承由timer_create函数创建的计时器
- 不继承异步输入和输出