Linux中父子进程的继承关系

在Linux下,我们经常要使用fork()创建子进程,那么子进程会继承父进程的哪些东西呢?子进程又有哪些是独立的呢?

子进程继承父进程

  • 用户号UIDs和用户组号GIDs
  • 环境Environment
  • 堆栈
  • 共享内存
  • 打开文件的描述符
  • 执行时关闭(Close-on-exec)标志
  • 信号(Signal)控制设定
  • 进程组号
  • 当前工作目录
  • 根目录
  • 文件方式创建屏蔽字
  • 资源限制
  • 控制终端

子进程独有

  • 进程号PID
  • 不同的父进程号
  • 自己的文件描述符和目录流的拷贝
  • 子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks)
  • 不继承异步输入和输出
  • 父进程和子进程拥有独立的地址空间和PID参数。

总的来说,子进程从父进程继承了用户号和用户组号,用户信息,目录信息,环境(表),打开的文件描述符,堆栈,(共享)内存等。
经过fork()以后,父进程和子进程拥有相同内容的代码段、数据段和用户堆栈,就像父进程把自己克隆了一遍。事实上,父进程只复制了自己的PCB块。而代码段,数据段和用户堆栈内存空间并没有复制一份,而是与子进程共享。只有当子进程在运行中出现写操作时,才会产生中断,并为子进程分配内存空间。由于父进程的PCB和子进程的一样,所以在PCB中断中所记录的父进程占有的资源,也是与子进程共享使用的。这里的“共享”一词意味着“竞争”

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值