#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <unistd.h>
#include<errno.h>
void LoopFunc(int);
int main(void)
{
int procNum = 0;
int loopNum = 0;
int i, j;
pid_t pid;
printf("请输入要运行的进程数");
scanf("%d", &procNum);
printf("请输入每个进程运行圈数");
scanf("%d", &loopNum);
for(i = 0; i < procNum; ++i)
{
pid = fork();
if (-1 == pid)
{
perror("fork err");
return 0;
}
if (pid > 0)
{
;
}
if (0 == pid)
{
for(j = 0; j < loopNum; ++j)
{
LoopFunc(j + 1);
}
return 0;
}
}
printf("over!\n");
return 0;
}
void LoopFunc(int num)
{
printf("LoopFunc......%d\n", num);
return;
}
/*
------------
每次循环后子进程结束不参与下一次fork,父进程继续上去生孩子.
父进程和子进程都是同时执行,父进程生完孩子就继续往下走.孩子自己执行自己的事情,
所以最后一句话printf("over!\n");可能出现在输出语句的任何位置这无关紧要.
如果让父进程不参与下一次fork而由孩子来参与下一次fork则形成2种不同的创建形态
父进程参与下一次fork形成深度为一的树一样的形状(一个爸爸,多个孩子)
子进程参与下一次fork形成链表一样形状(孩子生孩子)
------------
*/