Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
3年前关闭。
当我运行以下代码
我知道除非调用exec()或_exit(),否则如果我们尝试修改任何变量,vfork()的行为可能会很奇怪,但是有人可以解释一下到底发生了什么吗?为什么hello world被打印3次?是因为printf()被缓冲了吗?最后,为什么仅在父母试图返回时才出现段错误?
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
3年前关闭。
当我运行以下代码
#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()被缓冲了吗?最后,为什么仅在父母试图返回时才出现段错误?
最佳答案
(From POSIX.1) vfork()函数与fork(2)具有相同的作用,
如果行为是由创建的,则行为是不确定的
vfork()修改除pid_t类型的变量以外的任何数据
用于存储vfork()的返回值或
调用vfork()的函数,或调用任何其他函数
在成功调用_exit(2)或exec(3)系列之一之前
功能。
似乎您违反了使用vfork的所有条件。因此,这是行不通的。
关于c - 为什么vfork()给出段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38794290/
10-11 18:31