正确分叉N子进程

时间:2016-02-24 11:11:01

标签: c process fork

所以我正在编写一个简单的拉姆纸牌游戏。我需要创建3个,4个或5个进程,其中父级充当经销商将卡交给他们。我遇到了一个意想不到的错误,我不知道如何接近。

我得到的输出是:

15019373x-apollo:/home/15019373x/comp2432/lab3$ ./rummy 3
Child: 1 PID 26581
Child: 2 PID 26582
Child: 3 PID 26585
15019373x-apollo:/home/15019373x/comp2432/lab3$ Child: 2 PID 26584
Child: 3 PID 26586
Child: 3 PID 26583
Child: 3 PID 26587

所以我试图创建3个进程,但循环似乎创建了7.我不太确定发生了什么。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int players = atoi(argv[1]);
    char deck[52][3];
    int i, pid, cid;

    if (players > 5 || players < 3)
    {
            printf("%d is not the allowed number of players, min is 3 and max is 5\n", players);
            exit(1);
    }

    for (i = 0; i < argc - 2; i++)
    {
            strcpy(deck[i], argv[i+2]);
    }

    for (i = 0; i < players; i++)
    {
            pid = fork();
            if (pid < 0)
            {
                    printf("Fork Failed\n");
                    exit(1);
            }
            else if (pid == 0)
            {
                    printf("Child: %d PID %d\n", i+1, getpid());
            }
    }

}

如果有人能指出我正确的方向,我会非常感激。

非常感谢!

1 个答案:

答案 0 :(得分:2)

请记住,孩子继续执行for循环和fork更多孩子。

作为一个简单的修复(因为您显然仍在开发此程序),请在子代码中的exit()之后调用printf。您不希望子进程继续执行仅供父进程运行的代码。