私の質問は、実行時に親スタックに何が起こるかです?
main()
{
f();
g();
}
f()
{
vfork();
}
g()
{
int blast[100],i;
for(i=0;i<100;i++)
blast[i]=i;
}
動作はhttp://pubs.opengroup.org/onlinepubs/009695399/functions/vfork.htmlに従って未定義です
vfork() によって作成されたプロセスが [...] vfork() が呼び出された関数から戻る場合、動作は未定義です [...]
実際にvfork
は、もはやあまり役に立ちません。Linux 用のvfork の manページを読んでください。POSIX.1-2008 では vfork() の仕様が削除されていると書かれています。動作は実質的に for とほぼ同じですfork
(親が中断されていることを除いて)。だから私は、実際にvfork
は今日とほぼ同じだと確信してfork
います。しかし、過去 10 年間に私が読んだすべてのプログラムは使用されてfork
いませんでしたvfork
(書き込みページング動作の遅延コピーが今日十分に効率的であるため)。