父进程创建子进程,看起来容易,返回值等于零在子中,大于零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