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\n",count); 12 exit(0); 13 } 14 else{ 15 sleep(1); 16 wait(NULL); 17 printf("counter = %d\n",++count); 18 } 19 exit(0); 20 }
輸出結果:
child fork:counter = 0
counter = 2