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