实验报告三进程管理及进程通信.docx

实验报告三进程管理及进程通信.docx

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
精品word 精品word 精品word PAGE / NUMPAGES 试验三 进程管理及进程通信 试验环境: Linux操作系统 试验目的: 〔1〕利用Linux供给的系统调用设计程序,加深对进程概念的理解。 〔2〕体会系统进程调度的方法和效果。 〔3〕了解进程之间的通信方式以及各种通信方式的使用。 试验方法: 用vi 编写c 程序〔假定程序文件名为prog1.c〕 编译程序 $ gcc -o prog1.o prog1.c 或 $ cc -o prog1.o prog1.c 运行 $./prog1.o 试验内容及步骤: 试验1 编写程序。显示进程的有关标识〔进程标识、组标识、用户标识等〕。经过5 秒钟后,执行另一个程序,最终按用户指示〔如:Y/N〕结束操作。 编程截图: 运行结果: 试验2 参考例程1,编写程序。实现父进程创立一个子进程。体会子进程与父进程分别获得不同返回值,进而执行不同的程序段的方法。 例程1:利用fork()创立子进程 /* 用fork()系统调用创立子进程的例子*/ main() { int i; if (fork()) /*父进程执行的程序段*/ i=wait(); /* 等待子进程结束*/{ printf(It is parent process.\n); printf(The child process,ID number %d, is finished.\n,i); } else{ Printf(“It is child process.\n〞); Sleep(10); Exit(); } } 运行结果: 思考: 子进程是如何产生的? 又是如何结束的?子进程被创立后它的运行环境是怎 样建立的? 答:是由父进程用fock()函数创立形成的,通过exit()函数自我结束,子进程被创立后核心 将其安排一个进程表项和进程标识符,检查同时运行的进程数目,并且拷贝进程表项的数据,由子进程继承父进程全部文件。 试验3 参考例程2,编写程序。父进程通过循环语句创立假设干子进程。探讨进程的家族树以 及子进程继承父进程的资源的关系。 例程2:循环调用fork()创立多个子进程。 /*建立进程树*/ #includeunistd.h main() { int i; printf(“My pid is %d, my father’s pid is %d\n〞,getpid() ,getppid()); for(i=0; i3; i++) if(fork()==0) printf(“%d pid=%d ppid=%d\n〞, i,getpid(),getppid()); else { j=wait(0); Printf(“ %d:The chile %d is finished.\n〞 ,getpid(),j); } } 运行结果: 思考: ① 画出进程的家族树。 1834答:进程家族树 1834 1835 1835 1841 1841 1839 1839 1836 1836 1838 18381840 1837 试验4 参考例程3 编程,使用fork( )和exec( )等系统调用创立三个子进程。子进程分别启动 不同程序,并结束。反复执行该程序,观看运行结果,结束的先后,看是否有不同次 序。 例程3:创立子进程并用execlp()系统调用执行程序的试验 /*创立子进程,子进程启动其它程序*/ #includestdio.h #includeunistd.h main() { int child_pid1,child_pid2,child_pid3; int pid,status; setbuf(stdout,NULL); child_pid1=fork(); /*创立子进程1*/ if(child_pid1==0) { execlp(echo,echo,child process 1,(char *)0); /*子进程1 启动其它程序*/ perror(exec1 error.\n ); exit(1); } child_pid2=fork(); /*创立子进程2*/ if(child_pid2==0) { execlp(date,date,(char *)0); /*子进程2 启动其它程序*/ perror(exec2 error.\n ); exit(2); } child_pid3=fork(); /*创立子进程3*/ if(child_pid3==0) { execlp(ls,ls,(char *)0); /*子进程3 启动其它程序*/ perror(exec3 error.\n

文档评论(0)

精品大课件 + 关注
实名认证
内容提供者

专业类课件,PPT课件,ppt课件,专业类Word文档。只为能提供更有价值的文档。

1亿VIP精品文档

相关文档