C++ fork函数理解

C++ fork函数理解C 的 fork 函数用来 复制 一份主程序 即创建主进程的子进程 调用 fork 的同时 我的理解是 已经在内存中创建了 副本 进程 同时返回 pid 所以在返回值之前 已经是主进程和子进程同时在运行了 如果 fork 成功的话 这样 在程序的运行过程中 一次 fork 返回了两次值 在父进程中 fork 返回新创建子进程的进程 ID 在子进程中 fork 返回 0 这时候就能够同时跑两个进程了 实列如下

#include 
    #include 
    int main(int argc,char *argv[]){ //fork函数使用 int i = 0; printf("before fork\n"); pid_t pid = fork(); printf("after fork\n"); if (pid < 0){ printf("error\n"); return 1; } else if (pid == 0){ printf("fork success,this is son process\n"); while (i<10){ i += 1; printf("this is son process,i=%d\n",i); sleep(1); } } else{ printf("fork success,this is father process,son process id is %d \n",pid); while (i<10){ i += 2; printf("this is father process,i=%d\n",i); sleep(2); } } return 0; }

运行结果:

before fork after fork fork success,this is father process,son process id is 11054 this is father process,i=2 after fork fork success,this is son process this is son process,i=1 this is son process,i=2 this is father process,i=4 this is son process,i=3 this is son process,i=4 this is father process,i=6 this is son process,i=5 this is son process,i=6 this is father process,i=8 this is son process,i=7 this is son process,i=8 this is father process,i=10 this is son process,i=9 this is son process,i=10

在程序中,我们可以看到,fork函数调用之后,输出了两个“after fork”,也就是程序已经存在两个进程在跑;有一个变量i,在fork之前定义,然后在fork之后的运行过程中,子进程和主进程中的i值互不影响,两个进程同时在执行,可以验证fork是将主进程的资源全部拷贝了一份给子进程,两个进程的资源是独立的,互不影响。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215819.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午1:05
下一篇 2026年3月18日 下午1:06


相关推荐

  • 刚刚,微信被曝打造绝密 AI 智能体

    刚刚,微信被曝打造绝密 AI 智能体

    2026年3月13日
    3
  • ceph deep-scrub卡住导致业务中断问题分析

    ceph deep-scrub卡住导致业务中断问题分析1 问题背景一个 pgscrub 了 14 天 前端虚机挂掉大半 2 分析过程 2 1 查看 scrubpg 的主 OSD 日志从日志里可以看出 pg 13 832 有 slowop 该 oldestslowop 等待时间 s 14 天这些 op 都处于 waitingforsc 什么场景会导致 op 处于 waitingforsc 首先从字面上可以理解这些 op 是等待

    2026年2月8日
    2
  • mybatis分页查询之sql server–mysql[通俗易懂]

    mybatis分页查询之sql server–mysql[通俗易懂]freemarker.beansKey”location”wasnotfoundoninstanceoforg.springframework.jdbc.UncategorizedSQLException.freemarker.beansKey”location”wasnotfoundoninstanceofcom.microsoft.sqlserver.jdbc.SQLServerException.sqlserver使用mybatis中分页查询时出现故障

    2022年5月12日
    43
  • gcc的编译命令_cmake 编译

    gcc的编译命令_cmake 编译GCC编译命令                    —————-加入新公司后,基本上是一键式打包脚本,对于GCC基本上快忘了,重新拾起。GCC命令提供了非常多的命令选项,但并不是所有都要熟悉,初学时掌握几个常用的就可以了,到后面再慢慢学习其它选项,免得因选项太多而打击了学习的信心。一.常用编译命令选项假设源程序文件名为test.c。1…

    2022年10月13日
    5
  • 使用Python获取上海详细疫情数据(一)「建议收藏」

    使用Python获取上海详细疫情数据(一)「建议收藏」抽空之余,写个小脚本,获取下上海详细的疫情数据,以作后续的详实数据分析(纯爱好),或者仅仅作为对历史的一种数据样本式的保存也未尝不可,顺便吧,缓解或者平复下情绪。阅读本文章需要读者有一定的Python基础,且对XPATH、正则、selenium有一定.

    2025年11月24日
    4
  • 辛普森公式求积分

    辛普森公式求积分辛普森公式求积分

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号