fork()的运行是怎么弄的

#include <unistd.h>  
#include <stdio.h>  
int main(void)  
{  
   int i=0;  
   for(i=0;i<3;i++){  
       pid_t fpid=fork();  
       if(fpid==0)  
           printf("son/n");  
       else  
           printf("father/n");  
   }  
   return 0;  
  
}  
这运行结果是怎么样的,为什么会有不同的答案,能画下他的树形图让我更好理解下嘛
阅读 3k
3 个回答

补充楼上一点,子进程将复制父进程的内存空间,继承描述符。所以子进程的printf也可以输出到当前终端。

因为是多进程,所以输出结果并不是固定的。

clipboard.png

fork能夠返回兩次,它可能有三種不同的返回值:

  1. 在父進程中,fork返回新創建子進程的進程ID;

  2. 在子進程中,fork返回0

  3. 如果出現錯誤,fork返回一個負值;

也就是说,执行pid_t fpid=fork();成功会有两个進程:父跟子进程。

有不同的答案取决于OS调度器让那个进程先跑。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题