目标:熟悉父子进程之间资源共享
在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 ", a); 13 } 14 else { 15 sleep(1); //父进程,保证子进程先运行 16 printf("parent, a = %d ", a); 17 } 18 return 0; 19 }
编译执行结果:
从结果可以验证父子进程间遵循读时共享写时复制的原则。