Chinaunix首页 | 论坛 | 博客
  • 博客访问: 32191
  • 博文数量: 4
  • 博客积分: 598
  • 博客等级: 中士
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-21 15:57
文章存档

2010年(4)

分类: LINUX

2010-03-03 23:55:13


最近在使用fork函数时,遇到了一些问题,最后通过实验,终于明白了fork的用法,现在分享一下我的
一些体会。
那么,首先看一段代码(fork.c):
#include
#include
#include
#include

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
#include
#include
#include

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要好一些。






阅读(1754) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~