循环创建多个子进程
对于以下循环创建进程是什么样的呢?
int i = 0;while(i < 3){fork();/*功能代码*/i++;}
子进程创建如下图
学习笔记
对于仅含有一个 fork()的循环体,循环n次后,共有2^n个进程(包含最初始的父进程);若fork()在循环体的开端,循环体的代码将被执行(2^(n+1)-2)次;事实上,我们一般只让父进程fork,不让子进程继续fork,所以当 fork()返回值为0时,跳出循环,这样的话,循环n次,创建n个子进程;练习
通过命令行参数指定创建进程的个数,每个进程休眠 1S 打印自己是第几个被创 建的进程。如:第 1 个子进程休眠 0 秒打印:“我是第 1 个子进程”;第 2 个进程休眠 1 秒打 印:“我是第 2 个子进程”;第 3 个进程休眠 2 秒打印:“我是第 3 个子进程”。
目标
通过该练习掌握框架:循环创建 n 个子进程,使用循环因子 i 对创建的子进程加以区分;
代码
#include <stdio.h>#include <unistd.h>int main(int argc, char *argv[]){int i, n, pid;i = 0;n = *argv[1]-'0';while(i < n){pid = fork();if(!pid){break;}i++;}sleep(i);if(!pid){printf("I'm the %d child process.\n", i+1);}else if(pid > 0){printf("I'm the parent process %d.\n", i);}return 0;}
注:
每个子程序都不会执行i++;
运行结果
/07/24 13:03
@luxurylu