0

我想计算使用 for 1,10 创建的进程数以及执行 fork() si 的位置。该程序在linux中执行。我真的不知道如何使用等待或 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

like 宏WEXITSTATUSwait进程中用于在调用后获取退出状态。

在子进程中,只需返回nr(或将exit其作为参数调用)就足够了。

在你使用WEXITSTATUS这样的父母:

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

我们必须使用WIFEXITED检查,否则退出状态无效。

于 2013-04-06T11:22:11.847 回答