Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152398
  • 博文数量: 69
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 595
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-16 00:00
个人简介

宁可逆流而上与众不同,也不顺风顺水随波逐流

文章分类

全部博文(69)

文章存档

2020年(1)

2018年(9)

2017年(43)

2016年(16)

我的朋友

分类: C/C++

2017-02-19 12:38:52

一般的fork后子进程会获得父进程数据空间,堆,栈的副本。子进程改变这些并不会影响父进程。父子进程共享的是正文段。

但是fork之后复制这些区域给子进程会降低一些性能,所以出现了写时复制(Copy-On-Write COW),只有当父子进程中任意一个想改变其中一个区域时,内核就为那部分区域制作一个副本。后来又出现了vfork函数,vfork后的子进程在exec或exit之前都会一直在父进程空间中运行,所以它能够改变父进程状态

fork后子进程会拷贝父进程的缓冲区,包括缓冲区状态(_IOFBF,_IOLBF,_IONBF)。其实,fork后子进程会获得父进程的所有打开文件描述符,父子进程间相同的描述符共享文件表项(也就是它们处理的是同一文件且在同一状态)。

除了打开文件外,子进程也继承如下父进程的属性:
    实际用户ID,实际组ID,有效用户ID,有效组ID
    附加组ID
    进程组ID
    会话ID
    控制终端
    设置用户ID标志和设置组ID标志
    当前工作目录
    根目录
    文件模式创建屏蔽字
    信号屏蔽和安排
    针对任一打开文件描述符的在执行时关闭标志
    环境
    连接的共享存储段
    存储映射
    资源限制
阅读(969) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~