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()
的立即调用的前奏。
也就是说,唯一合法的电话是_exit
和exec*
。
关于c - 为什么vfork()导致父进程崩溃(段错误)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20158413/