最近在使用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要好一些。
阅读(1790) | 评论(0) | 转发(1) |