#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! "); return 0; } void LoopFunc(int num) { printf("LoopFunc......%d ", num); return; } /* ------------ 每次循环后子进程结束不参与下一次fork,父进程继续上去生孩子. 父进程和子进程都是同时执行,父进程生完孩子就继续往下走.孩子自己执行自己的事情, 所以最后一句话printf("over! ");可能出现在输出语句的任何位置这无关紧要. 如果让父进程不参与下一次fork而由孩子来参与下一次fork则形成2种不同的创建形态 父进程参与下一次fork形成深度为一的树一样的形状(一个爸爸,多个孩子) 子进程参与下一次fork形成链表一样形状(孩子生孩子) ------------ */