父进程创建子进程,看起来容易,返回值等于零在子中,大于零0在父进程中。可是当遇到一个父进程需要创建多个子进程的时候,问题就变得复杂了,稍不留神你将创建出比你多好多的子进程,因为当在子进程中调用fork(),那么自己进程也会创建子进程,结果因此和在父进程中创建子进程有很大的不同。
所以在fork时,一定要判定此时是不是在父进程中。
int main(){ pid_t pid[2]; int i; printf("This is %d\n",getpid()); for(i = 0;i < 3;i++ ){ if((pid[0] = fork()) < 0){ printf("Fork() Error!"); exit(-1); } if(pid[0] == 0) printf("This is parent %d,child is %d\n",getppid(),getpid()); } return 0;}
此时创建了几个进程类?如果你的答案是3,那你就错了。答案是7个进程。解决方法
void createsubprocess(int num) { pid_t pid; int i; for(i=0;i<num;i++) { pid=fork(); if(pid==0||pid==-1) //子进程或创建进程失败均退出,这里是关键所在 { break; } } if(pid==-1) { perror("fail to fork!\n"); exit(1); } else if(pid==0) { printf("子进程id=%d,其对应的父进程id=%d\n",getpid(),getppid()); exit(0); } else { printf("父进程id=%d\n",getpid()); exit(0); } }
具体参考:http://www.360doc.com/content/12/0409/17/532901_202238408.shtml
本文详细探讨了在编程中如何正确地创建和管理子进程,避免常见错误,并提供了解决方案来确保进程数量的准确性。通过实例分析,读者可以掌握在不同场景下使用fork函数时的注意事项。
7692

被折叠的 条评论
为什么被折叠?



