linux fork 程式後 主程式的全域性變數

OpenSoucre發表於2013-06-30

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

相關文章