fork函数使用随笔(转)

来源:互联网 发布:嵌入式软件招聘 编辑:程序博客网 时间:2024/04/28 19:18

  最近在使用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要好一些。