实验二操作系统进程创建.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
大连民族大学 计算机科学与工程学院 《操作系统》课程实验报告 实验题目: 实验二 进程的创建 实验类型:□演示性 □验证性 ■操作性 □设计性 □综合性 专业:网络工程 班级:163班 学生姓名:** 学号:*888888 实验日期:2018年 4月3日 实验地点:I305 实验学时:4 实验成绩: 指导教师签字: 2018年 5月10日 【实验目的】: (1)掌握进程的概念,明确进程的含义 (2)认识并了解进程的并发执行 (3)掌握进程的创建 (4)掌握进程另外的创建方法exec系列 【实验内容】: 1、阅读实例代码fork1, 并编辑、编译、运行,记录程序的运行结果,尝试给出合理的解释。 2、阅读实例代码fork2, 并编辑、编译、运行,记录程序的运行结果,尝试给出合理的解释。 3、阅读实例代码fork3, 查阅调用exec( )用新的程序替换该子进程的内容,掌握在程序中运行一个操作系统命令的方法,尝试给出合理的解释。 4、修改fork3, 使之能把运行的命令和程序作为参数传给fork3 5、写实验报告 附:实验代码 Fork1.c #includestdio.h #includeunistd.h main( ) { int pid; pid=fork(); if (pid==-1) {printf(“fork failed.\n”); return; } printf(“I’m the child.\n”); printf(“I’m the parent.\n”); return; } Fork2.c #include stdio.h main( ) { int p1,p2,i; while((p1=fork( ))= = -1); /*创建子进程p1*/ if (p1= =0) for(i=0;i10;i++) printf(daughter %d\n,i); else { while((p2=fork( ))= = -1); /*创建子进程p2*/ if(p2= =0) for(i=0;i10;i++) printf(son %d\n,i); else for(i=0;i10;i++) printf(parent %d\n,i); } } Fork3.c #includestdio.h includeunistd.h main() { int pid; pid=fork(); if(pid==0) { printf(“I’m the child.\n”); execl(“/bin/ls”,”ls”,0); perror(“exec error.\n”); } else if(pid0) printf(“I’m the parent.\n”) else printf(“fork failed.\n”); printf(“program end.\n”); } 【运行结果】: Fork1.c运行结果截图 Fock2.c运行结果截图 Fock3.c运行结果截图 【分析原因】: (1)对于程序1:因为系统调用fork()函数是一次调用两次返回值,而且先生成子进程还是父进程是不确定的,所以第一次执行生成子进程的时候返回的pid = 0,判断pid!=-1,所以输出了I’m the child. I’m the parent. 第二次,执行父进程的时候,返回的是子进程的进程号pid 0,即pid的值仍然不为-1,所以又输出了一次I’m the child. I’m the parent。 (2)对于程序2:由于进程并发执行的调度顺序和父子进程抢占处理机的问题,输出字符的顺序和先后随着执行的不同而发生变化。 (3)对于程序3:第一次调用fork()函数时,由于执行的是子进程还是父进程是随机的,所以第一次对父进程返回的是子进程的进程号(大于0),即pid 0,所以输出I’m the parent. Program end. 当第二次执行子进程时返回值是0,即pid = 0,所以输出I’m the child. 并调用了execl()函数,查看了指定路径中的文件。 【总结】: 调试过程中遇到的问题及解决过程 运行程序3的时候如果不接execl函数的头文件unistd.h会提示警告,而且因为execl的第三个参数是字符型指针数组,所以要强制转换成指针型。

文档评论(0)

moon8888 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档