0

for 1,10 と fork() si が実行された場所で作成されたプロセスの数を数えたいと思います。プログラムは Linux で実行されます。wait や WEXITSTATUS の使い方が本当にわからず、フォーラムで何時間も費やしましたが、まだわかりません。誰か助けてくれませんか?

ありがとう、ドラゴス

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

int nr = 1;

int main()
{


    int pid;
    int i;
    int stare;
    for(i = 1; i<=10 ; i++)
    {

        pid = fork();

        if( pid !=0 )
        {

            //parent
            wait(&stare);
            nr = nr + stare;


        }
        else
        {
            //child
            nr++;
            stare = WEXITSTATUS(nr);
            exit(nr);

        }
    }

    printf("\nNr: %d\n", nr);

}               
4

1 に答える 1

1

次のようなマクロは、呼び出し後に終了ステータスを取得するためにWEXITSTATUSプロセスで使用されます。wait

子プロセスでは、単に返す(または引数としてnr呼び出す) だけで十分です。exit

親では、次のWEXITSTATUSように使用します。

if (wait(&stare) > 0)
{
    if (WIFEXITED(stare))
        nr += WEXITSTATUS(stare);
}

WIFEXITEDそうしないと終了ステータスが無効になるため、チェックを使用する必要があります。

于 2013-04-06T11:22:11.847 に答える