0

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

void f1()
{
    vfork();
}

f2() 导致崩溃。

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


int main()
{
    f1();
    f2();
    _exit(0);                                                                                                                                    
}

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

4

1 回答 1

5

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

该函数vfork()相当于fork()_ vfork()_ _ _成功调用之前的其他函数或函数族之一。vfork()vfork()_exit()exec

... > 不建议将vfork()用于任何目的,除非作为立即调用exec家族函数或的前奏_exit()

也就是说,唯一合法的调用是_exitand exec*

于 2013-11-23T04:13:08.217 回答