Linux平台创建多个进程的方法
Linux平台创建多个进程的方法
自己第一次写创建多个进程的程序时不加思索地用循环,类似如下,
for(i=0; i<3; i++)
{
pid =fork();
if(pid==0)
{
child_process();
}
}
结果运行之后的结果很奇怪,因为父进程创建出来的子进程又会创建子进程,所以像一棵树一样创建下去,而不是所有子进程皆以主进程为父亲!
正确的方法应该是像引文中一样,如下;
法一
- #include<stdio.h>
- #include<stdlib.h>
- #include<unistd.h>
- pid_t pid;
- /*
- * num:当前已经创建的子进程数
- * max:需要创建的子进程数
- */
- void createsubprocess(int num,int max)
- {
- if(num>=max)return;
- pid=fork();
- if(pid<0)
- {
- perror("fork error!\n");
- exit(1);
- }
- //子进程
- else if(pid==0)
- {
- sleep(3);
- printf("子进程id=%d,父进程id=%d\n",getpid(),getppid());
- }
- //父进程
- else
- {
- num++;
- if(num==1)printf("父进程id=%d\n",getpid());
- if(num<max)createsubprocess(num,max);
- //此处加sleep是为了防止父进程先退出,从而产生异常
- sleep(5);
- }
- }
- int main()
- {
- int num=0;
- int max=3;
- createsubprocess(num,max);
- return 0;
- }
法二
- #include<stdio.h>
- #include<stdlib.h>
唉,竟然能用递归实现,小小崇拜一下^^ 不知道第一个写上面这样代码人是如何想到的! 也许大多数人都会想到用“无耻的”循环吧!
评论暂时关闭