fork 循环创建多个子进程
循环创建多个子进程
对于以下循环创建进程是什么样的呢?
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++;
运行结果
2020/07/24 13:03
@luxurylu
fork 循环创建多个子进程相关推荐
- linux编程两个子进程,Linux中fork同时创建多个子进程的方法
怎么创建多个进程呢?我说那还不容易,看下边代码: //省略必要头文件 int main() { pid_t pid[2]; int i; printf("This is %d\n" ...
- linux 创建子进程,linux中fork同时创建多个子进程的方法(一)
Fork同时创建多个子进程方法 第一种方法:验证通过 特点:同时创建多个子进程,每个子进程可以执行不同的任务,程序 可读性较好,便于分析,易扩展为多个子进程 int main(void) { prin ...
- Linux中fork()系统调用创建两个子进程
使用系统调用fork()创建两个子进程: #include <stdio.h> #include <unistd.h>int main(){int fpid = fork(); ...
- linux创建多个子进程,[Linux进程]使用fork函数创建多个子进程
#include #include int main (void) { pid_t pid1,pid2; //进程标识符 pid1 = fork(); //创建一个新的进程 if(pid ...
- Linux学习之系统编程篇:循环创建多个子进程练习
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() {int num = 5 ...
- Linux系统编程:fork函数的使用【循环创建N个子线程】
fork函数介绍 在linux下面进行系统编程,一定要养成一个好习惯,不懂的函数 直接 找男人,用man 指令进行查看,虽然是全英文 但是要强迫自己 学会看英文文档!下面是介绍,我们看重点. FORK ...
- fork()创建多个子进程
fork()创建多个子进程 在学习linux中,老师布置了一个作业: 编写一段程序,使用系统调用fork)创建两个子进程.当此程序运行时,在系统中有一个父进程和两个子进程活动.让每一个进程在屏幕上显示 ...
- fork创建多个子进程
references: [1] how to create two processes from a single Parent [2] fork() in C [3] linux中fork同时创建多 ...
- linux两个子进程通信,Linux c 匿名管道实例—创建两个子进程与父进程进行管道通信...
综合: 建立两个子进程: 一个负责计算1-50000的素数 另外一个负责计算50001-100000 父进程负责存储 利用fork创建两个子进程的框架: #include #include #incl ...
最新文章
- pandas学习之Series结构
- window7 64 VS2015下openCV3.4.0安装
- Java反射机制大神必学系列之 ,高级与低级的差别在哪里?
- python nameerror import_Python-ImportError:无法导入名称X
- LeetCode——树:层次遍历、前中后序遍历
- 多功能时钟电路的设计框图_一种病理组织漂片多功能一体机的设计
- python time模块详解_py 模块之 time模块 讲解②
- 快速JQuery——(第一章)第一个JQuery
- tomcat使用线程池配置高并发连接
- Excel表中的数据导入到数据库中
- 想入行SAP咨询,最具性价比的方式
- xp计算机管理命令,XP系统运行命令在哪打开
- 如何快速找到微信支付的商户号和商户密钥?望相互转告!
- 绿盟 java 面试_绿盟科技校园招聘面试经验|面试问题(共52条)- 职业圈
- 163vip邮箱登录,163邮箱怎么登陆?如何登录163vip邮箱?
- 2018-12-22-jekyll-theme-H2O
- 简单电子产品的蓝牙电路设计和PCB设计
- “牌面”养成记7:宜家的成功不是靠设计?!
- Squirrel中的类与实例
- 并注册烧写钩子 获取启动介质类型_一种基于USB烧写的数据传输方法与流程
热门文章
- 【XSS技巧拓展】————7、CSP浅析与简单的bypass
- Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tool
- unity撤销上一步_Unity3D撤回命令开发详解|chu
- LintCode 597.具有最大平均数的子树
- 多个List 如何取并集、交集
- Amihud非流动性指标计算
- springboot中使用freemarker根据flt模板导出word、pdf文档
- 应届毕业生工作7个月小结
- 【秋招面经】金山前端题目总结
- LLVM中的String相关