This question already has an answer here:
Closed 5 years ago.
vfork() atexit assertion failed
(1个答案)
上述程序的输出为:
(1个答案)
#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
Vfork
确保子进程在父进程之前执行,因此我认为当从函数f1()
返回时,子进程将执行f2()
,然后执行_exit(0)
;之后,父进程为什么不执行函数f2()
? 最佳答案
我假设你在问题正文中输入了错误的fork
,而不是vfork
。如果是这样的话,你就误用了vfork
。一旦发布vfork
你就不应该在孩子身上做任何事情,而不是exec
或退出。
函数的作用与fork(2)相同,只是
如果vfork()创建的进程
修改除用于存储的pid类型的变量以外的任何数据
vfork()的返回值,或
在成功调用vfork()之前,已调用或调用任何其他函数
调用(2)或执行函数(3)族中的一个
关于c - 为什么vfork会产生此输出? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21256029/
10-11 15:54