1

次のコードを理解しようとしています

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>

int main()
{
pid_t pid ;
unsigned int i=0;
pid=vfork();
switch(pid)
{
    case -1: // some sort of error
        puts("fork error");
        break;
    case 0: // the child process 
        while(i<100)
        {
            printf("%d\n", i);
            i++;
        }
        break;
    default: //parent
        while(i<1000)
        {
            printf("%d\n", i);
            i++;
        }
        break;
}
//  _exit(0);
}

そして、vfork() が悪いとか、こういうことだとは言わないでください。私はそれが であることを知っていますが、この種のエラーを引き起こしているこのコードで正確に何が起こっているのでしょうか。前もって感謝します

4

1 に答える 1

2

あなたが何をしようとしているのか、何を理解しようとしているのかは不明ですが、マニュアルからの引用を少し編集したものを次に示します。

vfork() 関数は fork(2) と同じ効果があり ますが、vfork() によって作成されたプロセスがいずれかの場合の動作は未定義です。

  1. vfork() からの戻り値を格納するために使用されるタイプ pid_t の変数以外のデータを変更します
  2. vfork() が呼び出された関数から戻る
  3. _exit(2) または exec(3) 関数ファミリの 1 つを正常に呼び出す前に、他の関数を呼び出します。

i++1:と 3の両方を実行していますprintf("%d\n", i)。何を期待しても、うまくいきません。

余談vforkですが、悪くないです。トリッキーで、危険で、ほとんど役に立たず、SUSv4 から削除されました。

于 2011-10-15T14:45:45.280 に答える