#include "stdio.h"
#include "unistd.h"
int main () {
int i;
for (i = 0; i < 5; ++i) {
if (fork() == 0) {
break;
}
}
if (i == 5) {
sleep(5);
printf("I'm parent\n");
} else {
sleep(i);
printf("I'm %dth child\n", i+1);
}
return 0;
}
父子进程遵循 读时共享 写时复制 的原则
* 父子进程 是否共享全局变量:读时共享,写时复制
#include "stdio.h"
#include "stdlib.h"
#include "unistd.h"
int var = 100;
int main () {
pid_t pid;
pid = fork();
if (pid == -1) {
perror("fork error");
exit(1);
} else if (pid > 0) {
var = 500;
printf("I'm parent and var = %d\n", var);
} else if (pid == 0) {
// var = 200;
printf("I'm child and var = %d\n", var);
}
return 0;
}
父进程在 修改全局变量时,会把自己复制一份,儿子进程没有修改,还是指向原来的副本
父子进程的不同之处:进程ID、fork的返回值、父进程ID、进程运行时间
父子进程共享:文件描述符、mmap建立的映射区