当我运行下面的代码为什么了vfork()给分段错误
#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(),可以在陌生的方式表现,如果我们试图修改任何变量,但有人可以解释究竟发生了什么?为什么你好世界印刷3次?是否因为printf()被缓冲?最后为什么在父母试图返回时发生seg故障?
如果你知道它正在调用一个未定义的行为,为什么你问具体的行为? –
这是未定义行为的含义,它不能被解释,否则,它将被定义为 –
“以一种奇怪的方式行事”并不是一个很好的表征“有未定义的行为”。特别是,不符合段错误的问题完全属于未定义行为的主要任意界限。因此,无论您的程序中是否存在可解释此类输出的任何代码,都要打印“hello world”三次。你不能合法地推断未定义的行为。 –