您的位置:首页 > 运维架构 > Linux

fork函数使用随笔

2010-05-18 23:53 225 查看
  最近在使用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这个变量),形成了两个相对独立的进程。

  那么,再来看下一个问题,代码如下:

  #include <stdio.h>

  #include <stdlib.h>

  #include <sys/types.h>

  #include <unistd.h>

  int main ()

  {

  int i;

  for (i = 0; i < 1; i++) {

  fork ();

  printf ("+ ");

  }

  return 0;

  }

  这是一个for循环,很简单,每次打印一个“+”号,首先,赋值1给i,运行,结果为:

  + +

  赋值2给i,运行,结果为:

  + + + + + +

  ...

  通过统计,可以得出结论:

  “+”号的总数为 = 2 * (0 + 1 + 2 ...)

  可见,一次循环,产生两个进程,第二次是加倍,第三次再加倍...

  可见fork能为我们源源不断的增加"人口“,再配合着exec家族,就能让linux的进程人丁兴旺了,当然,产生

  新进程的方法还有system,但出于安全的考虑,fork和exec要好一些
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  system linux gcc