1

我正在尝试理解以下代码

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>

int main()
{
pid_t pid ;
unsigned int i=0;
pid=vfork();
switch(pid)
{
    case -1: // some sort of error
        puts("fork error");
        break;
    case 0: // the child process 
        while(i<100)
        {
            printf("%d\n", i);
            i++;
        }
        break;
    default: //parent
        while(i<1000)
        {
            printf("%d\n", i);
            i++;
        }
        break;
}
//  _exit(0);
}

并且请不要告诉我 vfork() 是坏的和这类事情。我知道是这样,但是这段代码中究竟发生了什么导致这种错误。提前致谢

4

1 回答 1

2

目前尚不清楚您要尝试做什么或理解什么,但这里是手册中经过略微编辑的引述:

vfork() 函数与 fork(2) 具有相同的效果,除了 如果由 vfork() 创建的进程要么

  1. 修改除用于存储来自 vfork() 的返回值的 pid_t 类型变量以外的任何数据
  2. 从调用 vfork() 的函数返回
  3. 在成功调用 _exit(2) 或 exec(3) 系列函数之一之前调用任何其他函数

你正在做 1:i++和 3 printf("%d\n", i)。无论你期望什么,它都行不通。

作为旁注,vfork还不错。只是棘手、危险、几乎无用并从 SUSv4 中删除。

于 2011-10-15T14:45:45.280 回答