私の質問は実行中親スタックにはどうなりますか?Vfork()以上の破損
main()
{
f();
g();
}
f()
{
vfork();
}
g()
{
int blast[100],i;
for(i=0;i<100;i++)
blast[i]=i;
}
私の質問は実行中親スタックにはどうなりますか?Vfork()以上の破損
main()
{
f();
g();
}
f()
{
vfork();
}
g()
{
int blast[100],i;
for(i=0;i<100;i++)
blast[i]=i;
}
動作はのvforkによって作成されたプロセスは、()[...]のvfork()が[呼び出された関数から返された場合の動作は未定義であるhttp://pubs.opengroup.org/onlinepubs/009695399/functions/vfork.html
に従って定義されていません。 ..]
実際にはvfork
はもはやあまり役に立たない。 Linuxのvfork manページを読んでください。POSIX.1-2008は、vfork()の仕様を削除しています。の動作は、実際にはfork
(親が中断されていることを除いて)とほぼ同じです。だから、実際には、vfork
は今日はfork
とほとんど似ています。しかし、私が過去10年間に読んだプログラムでは、fork
ではなくvfork
となっています(なぜなら、書込みページング動作の遅延コピーは今日では十分に効率的だからです)。
実際には、 'vfork()'の現代的な使用法は 'posix_spawn'に似ています。つまり、MMUなしでは' fork() '(効率的にとにかく)できません。 – ninjalj
最近、vforkを使用する理由はほとんど同じです。ページテーブルのコピーはメモリをコピーするよりも高速ですが、特に大規模なプロセスでは、かなりの時間がかかります。 –
しかし、可能な出力は何ですか? – Aragorn
*何かが起こる可能性があります。一般的な実装では、子は親のスタック空間にゼロを書き込み、後で親は完全に閉じ込められたスタックフレームを持つ関数から戻ろうとします。 – chill