当我运行以下代码时
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
pid_t pid;
pid = vfork();
printf("hello world\n");
}
Output:
hello world
hello world
hello world
Segmentation fault
我知道除非调用 exec() 或 _exit() ,否则如果我们尝试修改任何变量,vfork() 可能会以奇怪的方式表现,但有人可以解释一下到底发生了什么吗?为什么 hello world 被打印了 3 次?是因为 printf() 正在缓冲吗?最后为什么当父母试图返回时会发生段错误?