0

vfork は親プロセスの変数を変更できますが、スタックを増やすことができないのはなぜですか?

void f1()
{
    vfork();
}

f2() はクラッシュにつながります。

void f2()
{
    char buf[100];
}


int main()
{
    f1();
    f2();
    _exit(0);                                                                                                                                    
}

vfork() を fork() に変更すると、クラッシュは発生しません。

4

1 に答える 1

5

呼び出し後にできることvfork()は、ファイルの実行だけです。それはドキュメントにあります:

vfork()関数は、fork()によって作成されたプロセスが、からの戻り値を格納するために使用されるタイプpid_tvfork()の変数以外のデータを変更する場合、または が呼び出された関数から戻る場合、または任意の正常に呼び出す前に他の関数または関数のファミリの 1 つ。vfork()vfork()_exit()exec

... >ファミリvfork()からの関数または への即時呼び出しの前奏曲として以外の目的で を使用することはお勧めしません。exec_exit()

つまり、正当な呼び出しは_exitとだけexec*です。

于 2013-11-23T04:13:08.217 に答える