vfork可以在父进程中更改变量,但为什么不能增加堆栈?
void f1()
{
vfork();
}
f2()导致崩溃。
void f2()
{
char buf[100];
}
int main()
{
f1();
f2();
_exit(0);
}
如果我将vfork()更改为fork(),则不会发生崩溃。
答案 0 :(得分:5)
调用vfork()
后,您唯一允许执行的操作是执行文件。它在the documentation:
vfork()
函数应等效于fork()
,但如果由vfork()
创建的进程修改 pid_t类型的变量以外的任何数据,则行为未定义用于存储vfork()
的返回值,或者从调用vfork()
的函数返回,或者在成功调用_exit()
或其中一个函数之前调用任何其他函数{1}}一系列功能。... > 除{作为立即调用
exec
系列函数或vfork()
函数的前奏之外,不建议将exec
用于任何目的。
即便如此,唯一合法的电话是_exit()
和exec*
。