用vfork()计算孩子的数量

时间:2014-04-19 09:26:22

标签: c bash ubuntu

我想用vfork()编写一个程序,父编写n个子节点,我想插入带参数的子数。然后我想总结儿子的数量,例如:

./sum 4
The sum of the child: 10
The sum of the parent: 10

(1 + 2 + 3 + 4)

这是我提出的小代码,但是我得到了无限循环。

int n = atoi(argv[1]);
int i = 1;
pid_t pid;
int sumchild = 0;
int sumparent = 0;

    while(i <= n){
        pid = vfork();
        if(pid == 0){
            sumchild = sumchild + i;        
        }

        i++;
    }
    printf("The sum of the child: %i ", sumchild);

    sumparent = (1 + n) * (n / 2);
    printf("The sum of the parent: %i \n", sumparent);

我听说你wait()中不需要fork(),但我不知道为什么我会在这里得到无限循环。

我应该如何使用vfork()? 我甚至编写了正确的代码还是犯了一些错误?

1 个答案:

答案 0 :(得分:1)

以下代码

    pid = vfork();
    if(pid == 0){
        sumchild = sumchild + i; 
根据{{​​3}}:

会导致未定义的行为

  

vfork()函数与fork(2)具有相同的效果,但如果由vfork()创建的进程修改除用于存储返回值的pid_t类型的变量之外的任何数据,则行为未定义。 vfork(),或从调用vfork()的函数返回,或在成功调用_exit(2)或exec(3)函数系列之前调用任何其他函数。