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

#include <stdio.h>
#include <unistd.h>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是将主进程的资源全部拷贝了一份给子进程,两个进程的资源是独立的,互不影响。

C++ fork函数理解相关推荐

  1. os.fork()函数理解

    os.fork()函数官方文档解释. fork是分叉的意思.根据官方文档我的理解是从主进程执行到fork函数部分开始分叉执行.(fork函数创建了一个子进程与主进程一起在cpu内执行.) os.for ...

  2. 关于理解Perl的fork函数的一个范例

    方便理解,Perl的fork函数派生子进程的过程: #!/usr/bin/perl -w # wangxiaoyu#live.com use strict; defined(my $pid=fork( ...

  3. 浅显理解*nix下的守护进程机制及fork函数

    最近空闲时间重新仔细看了一下memcached的使用说明文档,硬着头皮看了一点源码,有时候看到一些晦涩的c函数感觉实在恍惚只能跳过.不过也不算是全无收获,终于LZ还敢再看c语言,终于LZ又看起了c语言 ...

  4. 理解进程、通过调用 fork 函数创建进程

    文章目录 1.理解进程 1.1 CPU核的个数与进程数 1.2 进程 ID 2.通过调用 fork 函数创建进程 1.理解进程 进程(Process),其定义如下:"占用内存空间的正在运行的 ...

  5. 深入理解计算机系统--fork函数

    fork函数 一.函数的解析 (1) fork:创建进程 (2) fork函数调用一次,返回两次.返回的两次一次是在父进程中,fork返回子进程的PID:一次是在子进程中,fork返回0.其中,子进程 ...

  6. Unix/Linux fork()函数的理解

    作者:王姗姗,华清远见嵌入式学院讲师. 对于刚刚接触Unix/Linux操作系统,在Linux下编写多进程的人来说,fork是最难理解的概念之一:它执行一次却返回两个值. 首先我们来看下fork函数的 ...

  7. fork是linux函数吗,linux fork()函数

    概述 最近在看进程间的通信,看到了fork()函数,虽然以前用过,这次经过思考加深了理解.现总结如下: 1.函数本身 (1)头文件 #include #include (2)函数原型 pid_t fo ...

  8. Linux fork()函数底层CopyOnWrite写时复制实现原理剖析

    创建子进程的速度应该是怎么样的? 如果父进程是redis,内存数据比如说有10G,需要考虑的有两个点: ①速度如何 ②内存空间够不够 在Linux中有个系统调用--fork(): ①速度:快 ②空间: ...

  9. linux fork函数的精辟解说

    此文原文来源于一个blog,文章的名称为:linux fork函数的精辟解说原文地址:http://blog.chinaunix.net/space.php?uid=12461657&do=b ...

  10. 管道实现父子进程的信息传递(一)【fork函数、pipe函数、write/read操作、wait函数】

    文章目录 题目描述 代码实现 关于pipe函数 关于读写操作 关于读写端口 关于wait函数 功能: 注意: 关于fork函数 题目描述 编写一个程序,利用管道实现父子进程的通信,父进程向子进程发送信 ...

最新文章

  1. 程序员的朋友圈应该是这样的。。。
  2. (转载)输出文件的指定行
  3. android 编译之后黑屏_抖音BoostMultiDex:Android低版本上首次启动时间减少80%(一)...
  4. 阿里云PolarDB开源数据库社区与 Tapdata 联合共建开放数据技术生态
  5. C#退出窗体的总结方法
  6. 湖南乡村过年:祭祖、团圆饭、除夕、拜年
  7. 右键计算机无法进入管理员权限,电脑鼠标右键怎么添加取得管理员权限选项
  8. 复制assert目录文件到私有目录_每天学点之CentOS文件/目录的权限
  9. lt;转gt;Java转iOS-第一个项目总结(2):遇到问题和解决方案
  10. 21天学通JAVA:类设计的技巧
  11. 2、如何利用CommMonitor串口监控,抓取串口Modbus RTU数据包
  12. 混合式app开发框架
  13. win7系统怎么查看电脑配置,win7电脑系统配置查看
  14. python3 and
  15. c语言编程出彩色告白,C语言告白代码,一闪一闪亮晶晶~
  16. ArcGIS矢量数据模型
  17. 跑腿小程序系统,同城闪送、帮买帮送
  18. 七层网络性能基准测试中的协调遗漏问题--Coordinated Omission
  19. OSS异常:The specified bucket is not valid,修改ClientConfiguration配置才能解决
  20. 【外文翻译】外国友人写得很不错的Java Lambda表达式入门教程,我终于翻译好给大家啦!!!...

热门文章

  1. regionGrowth3D
  2. supermap大赛用得到python吗_Esri杯GIS大赛和SuperMap杯GIS大赛如何选择?
  3. linux grub.cnf grub64.efi 文件
  4. 需求分析模板_可以从哪些方面进行财务分析?财务分析模板实例拿去套用吧
  5. 板翅式换热器翅片表面传热与阻力特性性能分析
  6. 电脑上值得收藏的4个黑科技网站,日常办公中能帮你解决各种麻烦
  7. 目标跟踪 MOSSE(Visual Object Tracking using Adaptive Correlation Filters)
  8. CSDN如何修改id号
  9. 数据结构课设之航空订票系统(Java)下载链接在文末
  10. java实现飞机大战小游戏(源码+注释)