fork函數使用隨筆(轉)

  最近在使用fork函數時,遇到了一些問題,最後通過實驗,終於明白了fork的用法,現在分享一下我的

  一些體會。

  那麼,首先看一段代碼(fork.c):

  #include <stdio.h>

  #include <stdlib.h>

  #include <sys/types.h>

  #include <unistd.h>

  int main ()

  {

  pid_t pid;

  int count = 0;

  pid = fork ();

  if (pid != 0) {

  printf ("我是孩兒他爹/n/n");

  count += 1;

  }

  else {

  printf ("我是我爹的兒子/n/n");

  count += 1;

  }

  printf("統計結果是:%d/n", count);

  return 0;

  }

  編譯-- gcc fork.c -o fork

  運行,結果如下:

  我是我爹的兒子

  統計結果是:1

  我是孩兒他爹

  統計結果是:1

  從中我們可以看出,在執行了fork函數後,子進程首先執行,然後是父進程,同時通過計數器可以看出,

  兩個進程不共享內存區域(不共享count這個變量),形成了兩個相對獨立的進程。

  那麼,再來看下一個問題,代碼如下:

Code:
  1.   #include <stdio.h>   
  2.   
  3.   #include <stdlib.h>   
  4.   
  5.   #include <sys/types.h>   
  6.   
  7.   #include <unistd.h>   
  8.   
  9.   int main ()   
  10.   
  11.   {   
  12.   
  13.   int i;   
  14.   
  15.   for (i = 0; i < 1; i++) {   
  16.   
  17.   fork ();   
  18.   
  19.   printf ("+ ");   
  20.   
  21.   }   
  22.   
  23.   return 0;   
  24.   
  25.   }   
  26.   

  這是一個for循環,很簡單,每次打印一個“+”號,首先,賦值1給i,運行,結果爲:

  + +

  賦值2給i,運行,結果爲:

  + + + + + +

  ...

  通過統計,可以得出結論:

  “+”號的總數爲 = 2 * (0 + 1 + 2 ...)

  可見,一次循環,產生兩個進程,第二次是加倍,第三次再加倍...

  可見fork能爲我們源源不斷的增加"人口“,再配合着exec家族,就能讓linux的進程人丁興旺了,當然,產生

  新進程的方法還有system,但出於安全的考慮,fork和exec要好一些。

發佈了40 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章