Unix fork浅析
常见控制函数
- fork: 通过复制调用进程来建立新的进程, 是最基本的进程建立的过程
- exec: 通过一系列系统调用, 通过用新代码覆盖旧代码的方式, 覆盖原来的地址空间,实现执行代码转换
- wait: 提供初级进程同步的操作,让一个进程等待另一个进程结束
- exit: 终止一个进程
fork
- 为进程分配空闲的PCB (unix中又叫做proc结构)
- 分配唯一的pid
以一次一页的方式复制父进程地址空间
- 子进程大部分时候做的事情和父进程不一样, 所以需要后面exec操作 将子进程的代码覆盖父进程
- Linux使用COW(copy on write)技术, 优化了这一部分, 也就是读的时候共享地址,写的时候才是复制地址空间
- 从父进程继承各种共享资源, 如打开的文件
- 子进程状态设为就绪, 并且插入就绪队列
- 对子进程返回标识符0
- 向父进程返回子进程的pid
- fork执行完成后,进程就一分为二
参考
[1] 操作系统原理