linux - fork()的运行是怎么弄的
天蓬老师
天蓬老师 2017-04-17 16:01:43
[Linux讨论组]
#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;  
  
}  
这运行结果是怎么样的,为什么会有不同的答案,能画下他的树形图让我更好理解下嘛
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
高洛峰

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

巴扎黑

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

巴扎黑

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

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

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

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

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号