我想用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()
?
我甚至编写了正确的代码还是犯了一些错误?
答案 0 :(得分:1)
以下代码
pid = vfork();
if(pid == 0){
sumchild = sumchild + i;
根据{{3}}:,会导致未定义的行为
vfork()函数与fork(2)具有相同的效果,但如果由vfork()创建的进程修改除用于存储返回值的pid_t类型的变量之外的任何数据,则行为未定义。 vfork(),或从调用vfork()的函数返回,或在成功调用_exit(2)或exec(3)函数系列之前调用任何其他函数。