fork一个进程后,复制出来的task_struct结构与系统的堆栈空间是父进程独立的,但其他资源却是与父进程共享的,比如文件指针,socket描述符等
不同的进程使用不同的地址空间,子进程被创建后,父进程的全局变量,静态变量复制到子进程的地址空间中,这些变量将相互独立
1 #include <stdio.h> 2 #include <sys/types.h> 3 #include <stdlib.h> 4 #include <unistd.h> 5 6 int count = 1; 7 8 int main(){ 9 if(fork() == 0){ 10 count--; 11 printf("child fork:counter = %d ",count); 12 exit(0); 13 } 14 else{ 15 sleep(1); 16 wait(NULL); 17 printf("counter = %d ",++count); 18 } 19 exit(0); 20 }
输出结果:
child fork:counter = 0
counter = 2