使用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 (将#修改为@)