Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
5个叉子后只有1个孩子(C)_C_Process_Fork_Pid - Fatal编程技术网

5个叉子后只有1个孩子(C)

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){

我试图在C中创建一个处理器场。我首先打开消息队列,然后尝试创建工作进程:(注意,NROF_WORKERS是5)


现在,我注意到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);
        }
    }
}