- 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创建多子进程
HYPERLINK /s/blog_605f5b4f0100x444.html 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; int i; 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; int i; 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个子进程
您可能关注的文档
最近下载
- 公路养护工程施工组织设计方案.pdf VIP
- 多囊卵巢综合征(最新指南PPT课件).pptx
- 2025年北京通州区招聘社区工作者和社区专职党务工作者考试笔试试题.pdf VIP
- 健康教育咨询模板.docx VIP
- 高压旋喷桩计算表.xls VIP
- 2025年池州安徽省江南产业集中区建设投资发展(集团)有限公司招聘8名笔试备考试题及答案解析.docx VIP
- 皖2015S209混凝土砌块式排水检查井.docx VIP
- 工匠精神大国工匠.pptx VIP
- 审计学(西南财经大学)中国大学MOOC 慕课 章节测验客观题答案.docx VIP
- 设施规划 教学课件 ppt 作者 周宏明 第2章 设施选址.pptx VIP
原创力文档


文档评论(0)