父进程与子进程:
- 子进程会获得父进程数据空间、堆和栈的副本,但并不和父进程共享这些存储空间部分,而是写时复制。
- 父进程和子进程共享代码段
- 父进程的所有打开文件描述符都被复制到子进程中。若重定向父进程的标准输出,则fork子进程后,子进程的标准输出也被重定向
- 父进程和子进程共享同一文件偏移量
- 共享各种ID属性、继承执行时关闭标志、信号屏蔽、资源限制
- 子进程不继承父进程设置的文件锁,内存锁和某些定时器
同一进程中的线程共享的资源:
- 全局变量
- 进程指令
- 大多数数据
- 打开的文件描述符
- 信号处理函数和信号处置
- 当前工作目录
- 用户ID和组ID
不过每个线程都有各自的:
- 线程ID
- 寄存器集合,包括程序计数器和栈指针
- 栈(用于存放局部变量和返回地址)
- errno
- 信号掩码
- 优先级