所以我正在编写一个简单的拉姆纸牌游戏。我需要创建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());
}
}
}
如果有人能指出我正确的方向,我会非常感激。
非常感谢!
答案 0 :(得分:2)
请记住,孩子也继续执行for
循环和fork
更多孩子。
作为一个简单的修复(因为您显然仍在开发此程序),请在子代码中的exit()
之后调用printf
。您不希望子进程继续执行仅供父进程运行的代码。