网站大量收购独家精品文档,联系QQ:2885784924

fork创建多个子进程.docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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()由一个父进程创建同时多个子进程 的格式如

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档