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

对fork()的理解

    来源: 互联网  发布时间:2017-02-08

    本文导语:  对fork()始终还是不太明白,看看这样理解是否正确 1个父进程(A)中调用1次fork()函数,该fork()函数若创建成功则返回2次,即0/正数值; 当返回0时,则该父进程(A)下创建了一个子进程(B),子进程(B)向其自身返回自身ID值; 当返回正...

对fork()始终还是不太明白,看看这样理解是否正确
1个父进程(A)中调用1次fork()函数,该fork()函数若创建成功则返回2次,即0/正数值;
当返回0时,则该父进程(A)下创建了一个子进程(B),子进程(B)向其自身返回自身ID值;
当返回正数值时,该父进程(A)下仍然创建同一个子进程(B),但该子进程(B)则向父进程(A)返回其ID值;

所以在以下函数中,调用1次返回2次,每次执行以下2条printf()语句,
因此获得值为2个子进程的ID和2个父进程的ID:

#include
main(){
   fork();
   printf("child id%dn",getpid());
   printf("parent id%dn",getppid());
}

|
给你改几行代码,就好懂了。

#include 
#include 
main()
{
    pid_t id = fork();
    sleep(10);
    if(id==0)
    {
        printf("--- id%dn",id);
        printf("---child id%dn",getpid());
        printf("---parent id%dn",getppid());
    }
    else
    {
        printf("id%dn",id);
        printf("child id%dn",getpid());
        printf("parent id%dn",getppid());
    }
}


在sleep执行时,另开一个命令行,打一下"ps",你会发现有两个名字相同的进程。
这就是说,fork执行完以后,你有两个一模一样的程序在系统里。这就是fork的本质。
新的程序是从原程序的执行体上复制出来的,新程序执行的起点就是你调用fork的那个点。
所以,你看到的输出其实是来自两个程序。他们为父子关系,从各自打出的ID就能看出来。
在新的程序里,fork返回的是0.
在父程序里,fork返回的是新程序的pid。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












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


  • 站内导航:


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

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

    浙ICP备11055608号-3