2.2 进程控制之进程共享

目标:熟悉父子进程之间资源共享


fork函数执行之后,父子进程之间有哪些相同和不同之处呢?

-->相同处: 全局变量、.data.text、栈、堆、环境变量、用户ID、宿主目录、进程工作目录、信号处理方式...

-->不同处: 1.进程ID 2.fork返回值 3.父进程ID 4.进程运行时间 5.闹钟(定时器) 6.未决信号集

 注意:子进程复制了父进程0-3G用户空间内容,以及父进程的PCB,但pid不同,父子进程间遵循读时共享写时复制的原则。

例:共享全剧变量

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <unistd.h>
 4 int a = 10;            //全局变量,位于.data区 
 5 int main(void)
 6 {
 7     pid_t pid;
 8     pid = fork();
 9 
10     if(pid == 0){      //子进程
11         a = 1000;
12         printf("child, a = %d\n", a);
13     } 
14     else {
15         sleep(1);    //父进程,保证子进程先运行
16         printf("parent, a = %d\n", a);
17     }
18     return 0;
19 }

 编译执行结果:

 从结果可以验证父子进程间遵循读时共享写时复制的原则

猜你喜欢

转载自www.cnblogs.com/lxl-lennie/p/10213038.html
2.2