微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用fork在C中创建多个子进程

如何解决使用fork在C中创建多个子进程

我正在创建一个程序来检查当手牌被另一张牌替换时创建的最好和最差手牌的数量。我被要求通过使用 fork() 创建多个进程来做到这一点。这是我到目前为止所做的:

for(i = 1; i <= replacement; i++) {
        replaceCard = (char *)malloc(3);
        strcpy(replaceCard,argv[5+i]);
        pid = fork();
        if(pid < 0) {
            printf("Fork Failed! \n");
            exit(1);
        }
        else if (pid == 0) {
            printf("Child %d,pid %d: replacing %s\n",i,getpid(),replaceCard);
            worse = 0; best = 0;
            for(j = 0; j < 52; j++) {
                for(k = 0; k < 5; k++) {
                    if (strcmp(hand[k],replaceCard) == 0)
                        strcpy(handcopy[k],deck[j]);
                    else
                        strcpy(handcopy[k],hand[k]);
                }
                if(isstraightFlush(handcopy))
                    newRank = 9;
                else if(isFourKind(handcopy))
                    newRank = 8;
                else if(isFullHouse(handcopy))
                    newRank = 7;
                else if(isFlush(handcopy))
                    newRank = 6;
                else if(isstraight(handcopy))
                    newRank = 5;
                else if(isThreePair(handcopy))
                    newRank = 4;
                else if(isTwoPair(handcopy))
                    newRank = 3;
                else if(isOnePair(handcopy))
                    newRank = 2;
                else
                    newRank = 1;

                if(newRank > currRank)
                    ++best;
                else if(newRank < currRank)
                    ++worse;
            }
            
            printf("Child %d,pid %d: %d best hands and %d worse hands\n",best,worse);
            if(best > worse)
                exit(i);
            exit(0);
        }
        else {
            printf("Parent,PID %d: hand is < ",getpid());
            for(i = 0; i < 5; i++){
                printf("%s ",hand[i]);
            }
            printf(">\n");
            
            wait(&status);
            printf("Parent,pid %d: ",getpid());
            if(WEXITSTATUS(status) != 0)
                printf("Child %d suggests to replace %s\n",replaceCard);
            
        }
        free(replaceCard);
    }

这是我遇到问题的代码段。如果只需要一个子进程,我的代码工作正常,但是当需要多个子进程时,它会创建只创建一个子进程

代码用于作业,如果没有人想对其发表评论,我可以理解,但我不想要解决方案。我是 C 和 OS 概念的新手,我只是想知道这里的问题是什么。对错误的一点诊断会对我有所帮助。另外,我知道代码不干净。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。