为什么vfork()会导致父进程崩溃(段错误)?

lon*_*dao 0 c fork vfork

vfork可以在父进程中更改变量,但为什么不能增加堆栈呢?

void f1()
{
    vfork();
}
Run Code Online (Sandbox Code Playgroud)

f2()导致崩溃.

void f2()
{
    char buf[100];
}


int main()
{
    f1();
    f2();
    _exit(0);                                                                                                                                    
}
Run Code Online (Sandbox Code Playgroud)

如果我将vfork()更改为fork(),则不会发生崩溃.

Mat*_*all 5

调用后你唯一允许做的vfork()就是执行一个文件.它在文档中是正确的:

vfork()函数应该等效fork(),除非行为是未定义的,如果由vfork()任一个创建的进程修改除了用于存储返回值的pid_t类型的变量之外的任何数据vfork(),或者从vfork()调用的函数返回,或调用任何数据成功调用之前的其他功能_exit()或其中一个exec功能.

......> vfork()除了作为立即呼叫exec家庭功能的前奏之外_exit(),不建议用于任何目的.

也就是说,唯一合法的电话是_exitexec*.