红联Linux门户
Linux帮助

关于fork我的一点体会,希望对此仍有迷惑的人有所启示

发布时间:2007-10-22 17:58:30来源:红联作者:gxf
相信在很多LINUX下学C语言的人在学进程的时候对fork总有点不明白,其实最关键的是要理解fork之后到底发生了什么。

引用:
当一个进程调用了fork以后,系统会创建一个子进程.这个子进程和父进程不同的地方只有他的进程ID和父进程ID不同,其他的都是一样.就象进程克隆(clone)自己一样.一旦子进程被创建,父子进程一起从fork处继续执行,相互竞争系统的资源,理解这点非常重要。这里又可以讨论关于进程阻塞的问题,这里就不详细讨论了。


当然创建两个一模一样的进程是没有意义的.为了区分父进程和子进程,我们必须跟踪fork的返回值. 当fork掉用失败的时候(内存不足或者是用户的最大进程数已到)fork返回-1,否则fork的返回值有重要的作用.

对于父进程fork返回子进程的ID,而对于子进程fork返回0.这就是为什么说fork调用一次而返回2次。这里涉及到系统对进程的调度算法的不同造成CPU时间片分配的不确定性,父子进程会进行资源竞争,因而fork调用一次而返回2次也是必要的。我们也是根据这个返回值来区分父子进程的.

本篇算是抛砖引玉,欢迎批评指正!

[ 本帖最后由 gxf 于 2007-10-22 18:01 编辑 ]
文章评论

共有 3 条评论

  1. qwdzq 于 2008-03-13 12:11:07发表:

    要是能举个简单的例子就好了

  2. gxf 于 2007-10-22 22:20:00发表:

    呵呵,确实皮毛的概念问题。继续学习,最近学校刚好在上操作系统

    原理的课程,我得加油了。希望“beautiful ”大哥多多指教

    [ 本帖最后由 gxf 于 2007-10-22 22:35 编辑 ]

  3. beautiful 于 2007-10-22 20:26:09发表:

    小小懂一点,不过是概念级的