第讲linux进程创建.pdf
进程及进程间通信
张其亮
Operating System 1
Create process
Linux进程树
init进程是所有进程的祖先进程,它的进程pid=1
Operating System 2
Process
Operating System 3
fork
Linux进程的创建
Linux 通过fork()创建进程,进程创建后父
子 进 程 在 系 统 中 并 发 执 行
Fork系统调用
父进程创建子进程是通过fork()系统调
用完成的。此时一个进程“分裂”成两
个进程:一个是原来的进程,一个是新
创建的进程。 如何区分原来进
程和新进程?
Operating System 4
fork
可认为有两个返回值
Operating System 5
如何fork?
Operating System 6
fork
明白为什么fork()返回2次了吗
Operating System 7
fork
早期系统
这种方式是相当费时的,特别是调用fork()后,紧接着再调用
会替代子进程整个空间的exec()函数,这时拷贝虚拟页表就显
得多余了
Operating System 8
improve
改进
1.内核把进程的代码段设置为只读,父进程和子进程都共享该段
。
2对于在数据段,堆,栈中的页(pages),内核使用写时复制(
copy-on-write )。在最开始,内核让父子进程共享这些段中的
页,并把这些页设置为可读。当任意一个进程要修改其中一个页
时,内核负责把该页复制,然后让要修改该页的进程中的
table entry指向复制后的页。
Operating System 9
现在系统
Operating System 10
写时复制
Operating System 11
example
#include
#include
main()
{
int val;