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

void f1()
{
    vfork();
}

f2()导致崩溃。
void f2()
{
    char buf[100];
}


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

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

最佳答案

在调用vfork()之后,只允许执行一个文件。就在the documentation:
vfork()函数应等同于fork(),但如果由vfork()创建的进程修改了除用于存储vfork()返回值的pid类型变量以外的任何数据,或从调用了vfork()的函数返回,或在成功调用_exit()exec函数族。
...
>
不建议出于任何目的使用vfork(),除非是作为exec家族对函数或_exit()的立即调用的前奏。
也就是说,唯一合法的电话是_exitexec*

关于c - 为什么vfork()导致父进程崩溃(段错误)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20158413/

10-11 15:23