当前位置:  技术问答>linux和unix

关于fork系统调用

    来源: 互联网  发布时间:2016-05-14

    本文导语:  书上写:父进程的所有的资源全部都通过数据结构的复制“遗传”给子进程。 难道真是这样吗?父子进程就没有共享的东西吗?难道程序的正文段也被复制了吗? | 对,说白了还是写时复制...

书上写:父进程的所有的资源全部都通过数据结构的复制“遗传”给子进程。
难道真是这样吗?父子进程就没有共享的东西吗?难道程序的正文段也被复制了吗?

|
对,说白了还是写时复制,因为正文段父子进程都不会去写,所以实际使用同一块物理内存是可以的。

|
实际上一般都是在“写时复制”,并不是一开始就复制。
父子进程之间好像真没啥共享的东西。

|
由f o r k创建的新进程被称为子进程( child process)。该函数被调用一次,但返回两次。两次返
回的区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程I D。将子进程I D返回
给父进程的理由是:因为一个进程的子进程可以多于一个,所以没有一个函数使一个进程可以
获得其所有子进程的进程I D。f o r k使子进程得到返回值0的理由是:一个进程只会有一个父进
程,所以子进程总是可以调用g e t p p i d以获得其父进程的进程I D (进程ID 0总是由交换进程使用,
所以一个子进程的进程I D不可能为0 )。
子进程和父进程继续执行f o r k之后的指令。子进程是父进程的复制品。例如,子进程获得
父进程数据空间、堆和栈的复制品。注意,这是子进程所拥有的拷贝。父、子进程并不共享这
些存储空间部分。如果正文段是只读的,则父、子进程共享正文段(见7 . 6节)。
现在很多的实现并不做一个父进程数据段和堆的完全拷贝,因为在f o r k之后经常跟随着
e x e c。作为替代,使用了在写时复制( C o p y - O n - Write, COW)的技术。这些区域由父、子进程共
享,而且内核将它们的存取许可权改变为只读的。如果有进程试图修改这些区域,则内核为有
关部分,典型的是虚存系统中的“页”,做一个拷贝。B a c h〔1 9 8 6〕的9 . 2节和L e ff l e r等〔1 9 8 9〕
的5 . 7节对这种特征做了更详细的说明.-------------------------------------Unix环境高级编程

所以,2楼的说法是对的。

|
写时复制只是对内存空间进行的,事实上fork一个进程时,你要增加一些管理这个进程的数据结构,而这些数据结构的内容很多就是复制父进程的。


|
楼上几位这么清晰了,帮顶吧

    
 
 

您可能感兴趣的文章:

  • 还是有关fork的问题,fork在一个函数中调用,我被搞胡涂了
  • 执行一个main函数程序时,unix操作系统调用什么创建进程?fork?newproc?
  • Linux fork函数的系统调用实现过程是什么呢?
  • 创建进程的系统调用clone()和fork()
  • Unix中fork系统调用
  • 调用fork操作后,子进程有返回,父进程挂死,什么原因?
  • 关于跨越fork调用使用管道,会打开4个文件描述符?
  • fork~exec不会使用,请问怎么使用,我只是想简单的用进程调用一个程序。
  • fork()首次调用新创建进程时,其入口在哪里?在线等等
  • 急!急!fork()一个子进程,然后再子进程中调用execl出了问题。
  • 问个很简单的问题,求进程调用FORK()的代码
  • 怎样编写一段程序,要求调用fork并在子进程中建立一个新的对话期。验证子进程变成了进程组长而且不再有控制终端。
  • 各位前辈,当代码执行一个系统调用fork()后,为什么如果共享页设置了写时拷贝位,在父进程之前调度子进程将具有优越性?内核如何能使子进
  • 汇编调用fork的问题
  • linux下C语言编程调用fork的问题
  • 有关fork()调用的初级问题,急急急!!!高分求助。
  • linux内核高手进!关于调用__fork()时0号进程的子进程才能与父进程共享PID的困惑
  • 调用两次fork如何避免僵死进程呢?
  • 问个有难度的问题,2.6内核fork调用的怎么是clone
  • 关于fork,系统调用,库函数的问题
  • PHP建站系统 Fork CMS
  • 操作系统实现中的 if else fork()
  • 哪位高手给个unix系统下C语言socket+fork()+select()的例子?
  • Linux系统中C语言编程创建函数fork()执行解析
  • 初学操作系统,对于fork()函数有多处不理解,拜求大家赐教
  • 利用fork 与 dup2 执行 系统命令, 别的命令都可以获取执行结果,就fdisk 命令不可以. execve("/sbin/fdisk",args,NULL) , args 命令参数.
  • 挥泪大甩分,关于系统函数fork函数定义的具体实现
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 奇怪:程序一fork子进程时就停住了,似乎根本不能fork子进程啊?
  • unix中的fork2与fork有设么区别?
  • 程序在fork前申请了内存若干,在fork后子进程是否需要释放父进程之前申请的内存
  • fork()函数入门级问题:fork()与进程数
  • 一个fork的问题
  • 新手的问题关于fork?
  • 如何理解fork函数返回2次啊?
  • 急于明白Fork的用法.请提供中文解释.谢谢.
  • 关于fork的不解
  • 弱弱的问:fork和exec的区别是什么?
  • 关于fork的讨论
  • 关于fork的疑问?
  • fork之后的输出
  • 数据库 iis7站长之家
  • 关于fork创建进程的一个问题
  • exit和fork是什么关系?他们是怎么配合使用的?
  • fork函数,在线等待,马上结贴。谢谢!!!!!!!!!!!!
  • fork的问题
  • 请教 linux的fork从什么版本开始支持COW?
  • c++ 和 fork


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3