- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
fork创建多个子进程
Fork同时创建多个子进程方法(一)?第一种方法:验证通过 特点:同时创建多个子进程,每个子进程可以执行不同的任务,程序 可读性较好,便于分析,易扩展为多个子进程int main(void) { printf(before fork(), pid = %d\n, getpid()); pid_t p1 = fork(); if( p1 == 0 ){ printf(in child 1, pid = %d\n, getpid()); return 0; //若此处没有return 0 p1 进程也会执行 pid_t p2=fork()语句} pid_t p2 = fork(); if( p2 == 0 ) { printf(in child 2, pid = %d\n, getpid()); return 0; //子进程结束,跳回父进程Printf(hello world\);//没有打印}int st1, st2; waitpid( p1, st1, 0); waitpid( p2, st2, 0); printf(in parent, child 1 pid = %d\n, p1); printf(in parent, child 2 pid = %d\n, p2); printf(in parent, pid = %d\n, getpid()); printf(in parent, child 1 exited with %d\n, st1); printf(in parent, child 2 exited with %d\n, st2); return 0; } ?第二种方法: 验证通过 特点:同时创建两个子进程,结构比较繁琐,程序可读性不好,不易扩展?#includestdio.h #includeunistd.h #includesys/types.h //这个头文件不能少,否则pid_t没有定义 main(){ printf(This is parent process%d\n,getpid()); pid_t p1,p2; if((p1=fork())==0){ printf(This is child_1 process%d\n,getpid()); }Else{ if((p2=fork())==0){ printf(This is child_2 process%d\n,getpid()); }Else{ wait(p1,NULL,0); wait(p2,NULL,0); printf(This is parent process%d\n,getpid()); } } } ?第三种方法:for 循环方法 特点:其实每次循环只是创建了单个进程,并没有同时创建多个进程#includestdio.h #includeunistd.h #includesys/types.h main(){printf(This is parent process%d\n,getpid()); pid_t p1,p2; inti; for(i=0;i=2;i++){ if((p1=fork())==0){ printf(This is child_1 process%d\n,getpid()); return 0;//这个地方非常关键 } wait(p1,NULL,0); //父进程等待p1子进程执行后才能继续fork其他子进程printf(This is parent process%d\n,getpid()); }} 注意:标注的 return 0 对程序结果影响很大?无 return 0 情况 ?#includestdio.h #includeunistd.h #includesys/types.h main(){ printf(This is parent process%d\n,getpid()); pid_t p1,p2; inti; for(i=0;i=2;i++){ if((p1=fork())==0){ printf(This is child_1 process%d\n,getpid()); //return 0;//这个地方非常关键 } wait(p1,NULL,0); printf(This is parent process%d\n,getpid()); }} 结论:父进程会生成 n(n+1)/2+1个子进程,N 为循环次数,本例中共有 7 个子进程, 但实际上只有 3 个是父进程产生的,其余都为子进程 fork()出来的。父进程fork了3个进程,第一个子进程执行完之后又fork了2个进程,第2个子进程fork了1个进程。?正确的使用Linux中的用fork()由一个父进程创建同时多个子进程 的格式如
您可能关注的文档
- 英语:Unit 5 《Canada ---“The True North” 》-语法(新人教版必修3).ppt
- 英语:Unit5 Section A (新目标七年级下)(共40张PPT).ppt
- 英语:Unit_3_Under_the_sea(Language_points)(新人教版选修7).ppt
- 药剂学(崔福德主编_第七版)常考题目(大部分考题有答案).doc
- 药品养护基本要求.doc
- 荟萃经典2008年全国名校无机推断题(带详解与评分标准).doc
- 2-3化学平衡常数sk.ppt
- Module5 U1 Change 成长.ppt
- 荷尔蒙只负责一见钟情,柏拉图负责白头偕老。——对爱情完满解释.doc
- 葡萄糖、果糖结构与重要性质学案.doc
- 2-红河州建筑施工安全生产标准化工地复核评分表(2022年修改版).docx
- 6.锡通项目2018年下半年工作会汇报材料(2018.7.9).docx
- 2018道路工程知识点汇总(新版).docx
- 附件3:月度生产例会安全汇报资料-站台门项目部.docx
- 附件2:广东建工集团2018年度科技成果汇总表.DOC
- 马武停车区、三汇停车区停车位管理系统,0#台账缺量.doc
- 攀成钢委办发〔2015〕19号(党风廉政建设责任考核与追究办法).doc
- 1-红河州建筑工程质量管理标准化复核评分表(2022年修改版).docx
- 中交第三公路工程局第四工程分公司项目经济合同结算管理办法(修订).doc
- 厂站安全操作规程汇编.doc
最近下载
- 高中-英语-北师大版(2019)-Unit3Viewingworkshop同步教学设计【新教材】北师大版(2019)必修第一册.docx VIP
- 2023-2024学年八年级语文下学期期末复习题型专练非连续性文本阅读(原卷版+解析版).docx VIP
- 2024年海南省海口市龙华区海南华侨中学自主招生地理试题.docx VIP
- (三模)豫西北教研联盟 (平许洛济)2024—2025学年高三第三次质量检测化学试卷(含答案).pdf
- 中考数学压轴题100题(全).docx
- 石油钻井工初级.pdf
- 基于AT89S52单片机的脉搏测量器设计.doc VIP
- 微分中值定理在实际生活中的应用.doc
- 2023年版:重症患者气道廓清技术专家共识.docx
- 《马克思主义基本原理概论》对立统一规律.ppt
文档评论(0)