Vfork()和更多的腐败

时间:2011-11-20 11:40:34

标签: c unix bsd

我的问题是执行父堆栈会发生什么?

main()
{
    f();
    g();
}
f()
{
   vfork();
}
g()
{ 
    int blast[100],i;
    for(i=0;i<100;i++)
        blast[i]=i;
}

2 个答案:

答案 0 :(得分:3)

根据http://pubs.opengroup.org/onlinepubs/009695399/functions/vfork.html

,行为未定义
  

如果vfork()[...]创建的进程从调用vfork()的函数返回[...]

,则行为未定义

答案 1 :(得分:-1)

在实践中,vfork不再有用。阅读Linux的vfork man页面,其中 POSIX.1-2008删除了vfork()的规范。行为几乎与fork的行为相同(除了vfork父母被停职)。所以我敢打赌,实际上,fork今天几乎就像fork。但是我在过去十年中阅读的所有程序都使用vfork而不是{{1}}(因为写入分页行为的惰性副本今天已足够有效)。