循环方式
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#define child 10
int main(int argc, char const *argv[])
{
pid_t pid;
for (int i = 0; i < child; ++i)//创建子进程个数
{
if (pid=fork()==0)//判断是否为子进程
{
printf("子进程%d:%d\n",i+1,getpid());
return 0;//结束子进程
}
waitpid(pid,NULL,WUNTRACED);//等待当前子进程结束
}
printf("\n");
printf("父进程:%d\n",getpid());
return 0;
}
递归方式
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#define child 5//宏定义子进程个数
int child_child(int n);
int main(int argc, char const *argv[])
{
//pid_t pid;
child_child(child);
return 0;
}
int child_child(int n)
{
if (n<=0)//设置跳出函数条件
{
return 0;
}
else
{
pid_t pid = fork();//创建子进程
if (pid == 0)//判断是否是子进程
{
printf("子进程%d:%d\n",child-n+1,getpid());
//child_child(n-1);
//如果在此位置,就是子进程创建子进程
return 0;
}
waitpid(pid,NULL,WUNTRACED);
//child_child(n-1);
//如果在此位置,就是一个父进程创建多个子进程
}
}