我希望这个程序从0到5打印i,但它只打印一次迭代。但是,如果我注释掉父项的for循环,它会打印出预期的结果......会导致什么结果?
int main(){
int pid;
int i=0;
for(i=0;i<5;i++){
printf("i: %d\n",i);
pid = fork();
if(pid < 0){
printf("Error forking\n");
} else if(pid == 0){
//child
for(i=0;i<10;i++);
exit(1);
} else {
//parent
for(i=0;i<10;i++);
//exit(1);
}
}
}
答案 0 :(得分:3)
您始终在i
循环中访问相同的变量for
,尤其是在“内部”循环中:
for(i=0;i<10;i++);
将它们改为这样的独立循环:
int j;
for(j=0;j<10;j++);
那为什么它只执行一次迭代呢?由于i
在相应的内部循环之后具有值10
(在两个进程中),因此外部循环i < 5
的条件当然将评估为false
。
答案 1 :(得分:1)
由于空循环,父进程和子进程都将i设置为10。因此,当下一个“outter”迭代即将发生时,我是10,所以循环条件不正确。
答案 2 :(得分:1)
我建议对您的计划进行以下更改:
int main(void)
{
for(int i=0;i<5;i++) {
printf("i: %d\n",i);
pid_t pid = fork();
if(pid < 0) {
perror("Error forking\n");
} else if(pid == 0) {
//child
for(int j=0;j<10;j++) {
;
}
exit(EXIT_FAILURE);
} else {
//parent
for(int j=0;j<10;j++) {
;
}
exit(EXIT_FAILURE);
}
}
}