- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
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
文档评论(0)