刚fork之后:
父子相同处: 全局变量、.data、.text、栈、堆、环境变量、用户ID、宿主目录、进程工作目录、信号处理方式...
父子不同处: 1.进程ID   2.fork返回值   3.父进程ID    4.进程运行时间    5.闹钟(定时器)   6.未决信号集
似乎,子进程复制了父进程0-3G用户空间内容,以及父进程的PCB,但pid不同。真的每fork一个子进程都要将父进程的0-3G地址空间完全拷贝一份,然后在映射至物理内存吗?
当然不是!父子进程间遵循读时共享写时复制的原则。这样设计,无论子进程执行父进程的逻辑还是执行自己的逻辑都能节省内存开销。   
下面一段简单的程序可以很好的测试出父子进程是否共享全局变量。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>int a = 100;            //.data int main(void)
{pid_t pid;pid = fork();if(pid == 0){    //sona = 2000;printf("child, a = %d\n", a);} else {sleep(1);    //保证son先运行printf("parent, a = %d\n", a);}return 0;
}

重点注意!可以看出父子进程并不是共享全局变量
父子进程共享的有:

1. 文件描述符(打开文件的结构体)

2. mmap建立的映射区

特别的,fork之后父进程先执行还是子进程先执行不确定。取决于内核所使用的调度算法。

linux父子进程之间之间的区别与联系相关推荐

  1. linux父子进程字写父读无效,linux父子进程

    1)因为nginx的worker进程都是master进程fork出来的,继承了监听句柄. 2)nginx实现了一个锁,work进程竞争,谁获取锁,谁accept连接.######正解!######自己 ...

  2. linux 父子进程 资源_linux 父子进程 资源_实验4 Linux父子进程同步

    实验 4  Linux 父子进程同步 [实验目的] ( 1 )熟悉在 c 语言源程序中使用 linux 所提供的系统调用界面的方法. ( 2 )理解同步的概念. ( 3 )使用系统调用 wait() ...

  3. linux 父子进程 资源_从零开始学K8S(二):进程隔离让docker看起来像虚拟化

    各位小伙伴大家好,我是运维虫子! 上一篇,我们一起学习了docker的起源以及docker的简单运用,今天我们来从软件层面来了解一下docker的具体工作原理. Linux进程 进程是在 CPU 及内 ...

  4. Linux父子进程全局变量与局部变量

    任务 验证fork后父子进程的全局数据区及栈内存的共享情况. 具体描述:该实验创建2个进程,在父进程中创建一个全局变量,一个局部变量,并赋予初始值,用fork函数创建子进程.在子进程中对父进程的变量进 ...

  5. linux 父子进程结束,Linux下让父进程结束后,子进程自动结束

    在多进程编程的时候,经常会遇到这样的情况.父进程创建了一堆子进程,当遇到错误或者操作失误的时候把父进程关闭了,但是子进程还在跑,不得不一个一个地杀死子进程,或者使用ps,grep,awk,kill来配 ...

  6. linux 父子进程的关系

    2019独角兽企业重金招聘Python工程师标准>>> 1)父进程先于子进程终止: 此种情况就是我们前面所用的孤儿进程.当父进程先退出时,系统会让init进程接管子进程 . 2)子进 ...

  7. linux父子进程同步实验,Linux-父子进程的简单同步

    int fork() 功能:创建一个子进程 返回值:0-创建成功,-1-创建进程失败,>0-创建进程成功,返回返回子进程id int wait(int * status) 功能:将调用的进程挂起 ...

  8. linux 中线程是什么意思,Linux中进程与线程的区别是什么

    Linux中进程和线程的区别是什么?我相信很多没有经验的人对此无能为力.因此,本文总结了问题产生的原因及解决方法.希望你能通过这篇文章解决这个问题. Linux中进程和线程的对比与区别 1.概念 进程 ...

  9. linux中fopen和open的区别,Linux下open与fopen的区别

    int open(const char *path, int access,int mode) path 要打开的文件路径和名称 access 访问模式,宏定义和含义如下: O_RDONLY      ...

最新文章

  1. OpenCV Mat数据类型及位数总结
  2. GoogleSketchUp构建家庭模型
  3. 编译器是怎样工作的?用lex和yacc 写一个计算器(2)
  4. ebtables安装和使用
  5. 【Oracle】触发器最系统入门学习指导
  6. Datawhale-零基础入门NLP-新闻文本分类Task01
  7. magento effects.js jquery.lazyload.js 冲突
  8. 旷视科技Face++进军机器人业务
  9. matlab repmat_三行MATLAB实现动漫风格照片
  10. 数字经济发展指标体系和测算(含互联网宽带、电话普及率等多指标 内附原始数据) 2011-2020年
  11. 龙芯3A3000笔记本玩机笔记
  12. python 百度ai json解析_百度AI接口调用
  13. 2018年已经过了一半,你还记得年初时候定的小目标么——致已经逝去的2018上半年
  14. 微信公众号 苹果手机圆角失效
  15. 2019年私域流量的演变历程剖析:定义、演变、成因、改变企业营销决策!
  16. vmware15.5.5版本虚拟机(VMware Workstation 15 Pro)BUG(CentOS7.3下):切换大小写失效的解决方案
  17. iphone开源汇总
  18. 设计模式之禅-抽象工厂模式
  19. vue获取qq音乐歌曲音频资源
  20. 大前端CPU优化技术--NEON intrinsics进阶

热门文章

  1. 学术部活动具体落实计划
  2. 微信公众平台:反正公众号的一切操作都从这里入手!
  3. <<蜂鸟计划>>观后感
  4. Android:手把手带你深入剖析 Retrofit 2.0 源码
  5. git服务器与客户端的安装与使用
  6. PC市场连续5年滑坡,但对惠普戴尔来说是好消息
  7. [Android组件化]分发模块依赖倒置
  8. 经典递归——斐波那契数列,汉诺塔
  9. 无法初始化插件目录(can't initialize plug-ins directory)
  10. NetBeans 时事通讯(刊号 # 43 - Feb 03, 2009)