5个叉子后只有1个孩子(C)
我试图在C中创建一个处理器场。我首先打开消息队列,然后尝试创建工作进程:(注意,NROF_WORKERS是5)5个叉子后只有1个孩子(C),c,process,fork,pid,C,Process,Fork,Pid,我试图在C中创建一个处理器场。我首先打开消息队列,然后尝试创建工作进程:(注意,NROF_WORKERS是5) 现在,我注意到11909和11914的区别是5。所以我的问题是:是否创建了其他流程?如果是这样,他们为什么不报告?如果不是,我做错了什么?此外,家长根本没有报告,这是如何造成的 所有子项都已创建,但将永远在循环中循环,而i仅对父项递增: int i = 0; while (i < NROF_WORKERS){ if (getpid() == farmerPID){
现在,我注意到11909和11914的区别是5。所以我的问题是:是否创建了其他流程?如果是这样,他们为什么不报告?如果不是,我做错了什么?此外,家长根本没有报告,这是如何造成的 所有子项都已创建,但将永远在
循环中循环,而i
仅对父项递增:
int i = 0;
while (i < NROF_WORKERS){
if (getpid() == farmerPID){
i++; // <---- This is happening for the parent process only.
printf ("Parent is creating a child!%d\n", getpid());
processID = fork();
}
}
您总是打印farmerPid
!但是,由于邮件打印了5次,您实际上创建了5个流程:
while (i < NROF_WORKERS){
if (getpid() == farmerPID){
i++;
printf ("Parent is creating a child!%d\n", getpid());
processID = fork();
}
}
while(i
如果要打印子PID,则代码必须在父级和子级之间进行区分,如中所示:
while (i < NROF_WORKERS){
if (getpid() == farmerPID){
i++;
printf ("Parent is creating a child!\n");
processID = fork();
if (processID==0) { // child
printf("I am the child %d\n",getpid());
} else { // parent
printf("Parent just created child %d\n",processID);
}
}
}
while(i
.........
processID = fork();
.........
.........
if (processID == farmerPID) {
printf("Parent reporting in!%d\n");
}
while (i < NROF_WORKERS){
if (getpid() == farmerPID){
i++;
printf ("Parent is creating a child!%d\n", getpid());
processID = fork();
}
}
while (i < NROF_WORKERS){
if (getpid() == farmerPID){
i++;
printf ("Parent is creating a child!\n");
processID = fork();
if (processID==0) { // child
printf("I am the child %d\n",getpid());
} else { // parent
printf("Parent just created child %d\n",processID);
}
}
}