在linux系统上父子进程继承了哪些资源,fork后子进程对父进程资源的继承

声明:本人正在研读UNIX环境高级编程,相关博文为学习心得,观点可能会有错误,若那位大神发现错误,请留言指正,不胜感激。

什么时候使用fork创建新进程

当父进程执行到某个阶段,或接收到某个事件后,需要创建一个独立的进程来协助其完成任务时,才需要调用fork创建一个新进

程。

关于fork

使用fork创建一个新进程后,基于copy-on-write机制,不会立即将父进程的进程分布复制一份给子进程。而对于父进程在fork前所使用的资源,子进程继承了大部分,如父进程打开的文件描述符,还有部分没有继承。

为什么子进程要继承父进程的大部分资源

linux下,当fork后,子进程继承了对父进程所拥有的,打开的文件的访问权。为什么会这样?仔细想想,这个为什么本什么没有多

大意义。创建新进程是操作系统的一个重要的功能,理论上,创建一个新进程后,子进程可以继承,也可以不继承父进程的任何资

源。但是,作为一个成熟,优秀的操作系统,在决定新进程应该继承父今晨的那些资源时,需要考虑的是,继承或不继承某些资源

对父子进程后序的交互,或共同完成常见可能遇到的问题时的方便性。

子进程继承父进程大部分资源的好处

通常情况下,父进程在某个条件满足的情况下,才决定创建一个新进程(对于工程应用而言,总是在需要的时候才做相关操作,

并不像教科书里的例子那样,为了创建而创建)。父进程创建子进程是为了其能够协助父进程完成某些操作,因此,父进程必须将

其自己的一些资源分享给子进程,以便父子进程共同完成任务。

为什么子进程没有继承父进程的所有资源

对于父进程的文件锁,pending alarms和pending signals,子进程并没有继承。其原因,还是与创建子进程的目的相关。子进程的

创建是为了协助父进程完成相关任务,仅此而已。与此目的不相关的资源,子进程没有必要继承,继承了自会白白浪费内存资源。

而且,文件锁是为了防止文件被多个线程同时访问,而造成文件内容混乱的一种机制,若子进程继承了父进程的文件锁,则可能会

导致文件访问混乱的现象。pending alarm和pending signal为父进程的私有资源,子进程没有必要继承,若子进程继承了父进程的

signal,可能导致重复响应操作。

子进程继承父进程文件,并协助父进程共同完成文件写操作

假设,父进程用于长期监测某长期需要监控的对象A,并将监测数据写入到文件。与A相关联的被监测对象B会偶尔产生一些少量

数据。因此,可以创建子进程来处理B的监测工作,子进程只是短暂存在。父子进程共享父进程的文件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值