C 为什么vWork会产生这种输出?

C 为什么vWork会产生这种输出?,c,linux,unix,process,C,Linux,Unix,Process,Vfork确保子进程在父进程之前执行,因此我认为当从函数f1()返回时,子进程将执行f2(),然后退出(0);在那之后,为什么父进程不执行函数f2()?我假设您在问题体中输入了fork,而不是vfork。如果是这种情况,您就误用了vWork。一旦发出vWork命令,除了exec或退出之外,您不应该在子级中执行任何操作 函数的作用与fork(2)相同,只是 如果vWork()创建的进程 修改除用于存储的pid类型变量以外的任何数据 vfork()的返回值,或从 成功调用vWork()或调用任何其他

Vfork
确保子进程在父进程之前执行,因此我认为当从函数
f1()
返回时,子进程将执行
f2()
,然后退出(0);在那之后,为什么父进程不执行函数
f2()

我假设您在问题体中输入了
fork
,而不是
vfork
。如果是这种情况,您就误用了
vWork
。一旦发出
vWork
命令,除了
exec
或退出之外,您不应该在子级中执行任何操作

函数的作用与fork(2)相同,只是 如果vWork()创建的进程 修改除用于存储的pid类型变量以外的任何数据 vfork()的返回值,或从 成功调用vWork()或调用任何其他函数之前 调用exit(2)或exec(3)系列函数之一


我只能在您的文件夹中找到
fork()
example@skwllsp抱歉,我没有键入vfork..您的意思是如果我使用vfork,那么我不应该调用子进程中的任何函数吗?但是允许使用一些基本语句?@Charles0429您可以执行或调用
\u exit
。特别是,您应该努力不更改进程空间,因为它属于父进程空间。
#include <unistd.h>
#include <stdio.h>

static void f1(void);
static void f2(void);

int main(void)
{
    printf("process id:%d\n", getpid());
    f1();
    f2();
    _exit(0);
}

static void f1(void)
{
    pid_t pid;

    if((pid = vfork()) < 0)
    {
        printf("vfork error\n");
    }
}
static void f2(void)
{
    char buf[1000];
    int i;

    for(i = 0;  i < sizeof(buf); i++)
    {
        buf[i] = 0;
    }

    printf("f2:process id:%d\n", getpid());
}
process id:9956
f2:process id:9957