父子进程有自己独立的地址空间|学习笔记

简介: 快速学习父子进程有自己独立的地址空间

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频父子进程有自己独立的地址空间】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/10986


父子进程有自己独立的地址空间

 

内容简介:

一、内容

二、举例子进行说明

 

一、内容

接下来去验证父子进程分别有各自独立的地址空间,之前提到父进程创建子进程之后,

先看下图:

image.gif可以看到上图中父进程有自己的栈区、堆区、 BSS 区、数据区、代码区,子进程也有自己的栈区、堆区、 BSS 区、数据区、代码区,子进程是复制了父进程的内存,进程空间是独立的,也就是说如果父进程有 number ,那么子进程也继承了 number ,但是父进程的 number 是父进程的,子进程的 number 是子进程的,父进程对父进程的 number 进行改变是不会影响子进程的 number 。

 

二、举例子进行说明 

1、输入代码

接下来举一个例子验证父子进程有各自独立的地址空间,

例子如下所示:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

int var=10

int main(int argc, char *argv[])

{

pid_t pid;

int num=9;

pid=fork();

if(pid<0)

{

perror(“fork”);

}

if(pid==0)

{

var++;

num++;

printf(“in son process var=%d,num=%d\n”,var,num);

}

printf(“common code area\n”);

return 0;

}

在这个程序当中定义一个全局变量 var 等于10,局部变量 number等于9,,有个全局有个局部,然后在第九行的时候, folk 创建子进程,子进程当中就有 var 、就有 number ,在子进程当中它干了什么事?“var++ num++”,其中 var 打11, num 打10,这是加之后的;父进程它干什么事?先 sleep(1),它 sleep(1)时子进程就已经执行完了“var++;

num++;

Printf(“in son process var=%d,num=%d\n”,var,num);”

代码,然后再执行“printf(“common code area\n”);”代码,子进程就结束了。

一秒钟之后,父进程再去打印 var 和 num ,如果说它是共享 var 和 num ,那么父进程的 var 和 num 是11和10,如果说打的是十和九,证明子进程对 var 和 num 进行加的时候没有影响父进程的 var 和 num ,即它们是独立的。

2、代码实现

(1)执行代码

看一下是共有 var 和 num ,还是独立的拥有 var 和 num ,父进程一秒钟之后打 var 和 num ,然后再打公共代码,就结束了,如下代码所示:

[01_day]1s

aaa.txt fork fork.c my_cp.c pid.c read.c test.txt

dest.txt fork2.c my_cp pid   read tags  wanqi.txt

[01_day]gcc fork2.c -o fork2

[01_day]./fork2

in son process var=11,num=10

common code area

in father process var=10,num=9

common code area

可以看到子进程当中 var 是十一, num 是十,一秒钟之后父进程再去打的话还是十和九,就没加过,因为它是后来打印的,子进程早都加过了,它还没变,说明父进程有自己的 var 和 num ,子进程也有自己的 var 和 num 。

(2)再次执行代码

即使再执行一遍子进程的一秒钟之后父进程的还是十和九,验证了父子进程有自己独立的地址空间,

代码如下所示:

[01_day]./fork2

in son process var=11,num=10

common code area

in father process var=10,num=9

common code area

相关文章
|
6月前
|
安全 Linux 编译器
Linux进程——进程地址空间
Linux进程——进程地址空间
51 2
|
5月前
|
Java Linux 编译器
【Linux】深挖进程地址空间
【Linux】深挖进程地址空间
40 0
|
6月前
|
存储 算法 Linux
【Linux】进程的地址空间
【Linux】进程的地址空间
|
5月前
|
Linux
【Linux】进程地址空间
【Linux】进程地址空间
|
6月前
|
Linux 调度 C++
【linux】进程的地址空间
【linux】进程的地址空间
49 0
|
7月前
|
存储 安全 Linux
Linux:进程地址空间
Linux:进程地址空间
63 10
|
7月前
|
存储 Linux 程序员
【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解
【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解
|
7月前
|
消息中间件 Java C++
"Java多线程基础-2:简介虚拟地址空间——保障进程间独立性的机制 "
如何保障进程之间这样的独立性?操作系统采用了“虚拟地址空间”的方式。
48 0
|
7月前
|
安全 Linux 编译器
【linux进程(七)】程序地址空间深度剖析
【linux进程(七)】程序地址空间深度剖析
|
7月前
|
Shell Linux 程序员
【linux进程(六)】环境变量再理解&程序地址空间初认识
【linux进程(六)】环境变量再理解&程序地址空间初认识

相关实验场景

更多