linux进程介绍之fork vs vfork(转)
来源:互联网 发布:mysql 亿级数据 编辑:程序博客网 时间:2024/05/16 06:41
在fork之后,子进程和父进程都会继续执行fork调用之后的指令。子进程是父进程的副本。它将获得父进程的数据空间,堆和栈的副本,这些都是副本,父子进程并不共享这部分的内存。也就是说,子进程对父进程中的同名变量进行修改并不会影响其在父进程中的值。但是父子进程又共享一些东西,简单说来就是程序的正文段。正文段存放着由cpu执行的机器指令,通常是read-only的。
由于在fork之后我们常常都是跟个exec在后面,所以为了提高效率,很多的实现并不完全复制数据段和堆、栈,而是采用写时复制,有点类似于某些cache与内存数据的同步方法。
另一种提高效率的方法就是使用vfork,vfork最早起源于2.9BSD,它与fork的不同就在于它并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec.vfork出来的子进程是在父进程的空间中运行的,它的存在就是为了exec调用,所以它不需要复制这些东西,因为复制了也没有用。如果这时子进程修改了某个变量,这将影响到父进程。
vfork与fork的另一区别是:vfork保证子进程先运行,在它调用exec或exit后父进程才可能调度运行。而fork的父子进程运行顺序是不定的,它取决于内核的调度算法。
所以,fork的时候,程序代码被复用了——我指的程序代码就是由cpu执行的机器指令部分,这与有多少个进程在运行无关,即使是频繁执行的程序在存储器中也只需一个副本,而且它在执行期可能是read-only的。当然,如果你exec了,那就是另一码事了。
另外,父进程中的数据空间和堆、栈可能会产生副本,具体情况要看你使用的是vfork还是fork.fork会产生副本,而vfork则共享这部分内存。
- linux进程介绍之fork vs vfork(转)
- linux进程之fork vs vfork
- linux进程之fork vs vfork
- linux进程之fork vs vfork
- linux之fork,vfork创建子进程
- Linux学习之进程fork()与vfork()
- Linux多进程之fork()和vfork()函数的对比
- Linux内核-进程之fork、vfork和clone
- Linux的进程学习笔记之fork与vfork
- Linux应用程序开发之 多进程程序设计(一) fork()和vfork()
- Linux进程学习(二)之fork()和vfork()的学习
- linux进程(fork/vfork)与wait/waitpid
- linux学习---进程控制(fork,vfork,popen,exec,system)
- linux进程 fork与vfork简解
- linux 进程创建clone、fork与vfork
- Linux进程fork,exec,vfork详解
- Linux进程创建fork()与vfork()
- Linux控制进程实战fork /vfork
- textbox填充编辑数据
- 常用的消息映射宏
- 杨澜告诫女孩
- 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。
- linux socket 文件传输程序
- linux进程介绍之fork vs vfork(转)
- 读书笔记4——数据窗口的retrievestart事件和retrieverow事件
- 高斯分布
- 学学钢琴(天空之城)
- 做个cxgrid5绿色快捷安装包---批处理安装
- (转)JSP如何防范SQL注入攻击
- csdn 写下第一刻
- 战胜
- 串行通信与重叠I/O