fork()函數能夠讓進程拷貝出一個幾乎與其如出一轍的子進程出來,fork函數調用一次卻會返回兩次:併發
一次在父進程,一次在子進程。它的返回值取決於當前進程,若是是子進程則返回0,父進程則返回子進程PID。函數
通常來講父子進程有以下特色:spa
1 父進程與子進程是併發執行;code
2 相同可是相對獨立的地址空間;blog
3 共享文件IO。進程
一段簡單的代碼以下所示:get
1 #include<unistd.h> 2 #include<stdio.h> 3 4 int main() 5 { 6 // int i=0; 7 pid_t fpid; 8 fpid=fork(); 9 if(fpid<0) 10 { 11 printf("error in fork()\n"); 12 } 13 else if(fpid==0) 14 { 15 printf("pid==%d\n",getpid()); 16 printf("fpid=0\n"); 17 } 18 else if(fpid>0) 19 { 20 21 printf("pid==%d\n",getpid()); 22 printf("fpid!=0\n"); 23 } 24 25 return 0; 26 }
編譯執行後結果:io
1 $:~/sb/codetest$ ./a.out 2 fpid=7262 3 pid==7261 4 fpid!=0
5 fpid=0 6 pid==7262 7 fpid=0