Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过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