linux实验_进程管理_ubunto.docVIP

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

《Linux操作系统设计实践》 学号: 姓名: 学院: 专业: 年级: 班级: 实验时间:2009-2010学年第一学期 指导教师: 实验一:进程管理 【实验目的】 (1) 加深对进程概念的理解,明确进程和程序的区别。 (2) 进一步认识并发执行的实质。 (3) 分析进程争用系统资源的现象,学习解决进程互斥的方法。 (4) 了解Linux系统中进程通信的基本原理。 【试验预备内容】 (1)理解进程与程序的区别,并发执行的概念。 (2)理解系统调用fork()的作用,分析进程的创建过程。 (3)阅读相关资料及Linux系统的内核源码文件sched.h和fork.c,加深对进程管理概念的理解。 【实验内容】 (1)【进程的创建】 编写一段程序,使用系统调用fork()创建两个子进程,当此进程运行时,在系统中有一个父进程和两个子进程活动,让每一个进程在屏幕上显示一个字符,父进程显示字符“a”;子进程分别显示字符“b”和字符“c”,试观察记录屏幕上的显示结果,并分析原因。 【源程序】: #include int main int p1, p2; while p1 fork -1 ; if p1 0 //第一子进程 putchar b ; else while p2 fork -1 ; if p2 0 putchar c ; //第二子进程 else putchar a ; //父进程 return 0; 运行多次:主要输出有bca,偶尔输出cab和cba,abc,bac,acb… 会有如此多种不同输出,主要是因为fork 生成的子进程和父进程是并行运行的,所以先运行哪个进程是由系统的调度算法决定的,ubuntu9.04很大概率系统会先输出bca是因为ubuntu 9.04在fork()运行之后很大概率先运行子进程,再运行父进程。当然也有可能先运行父进程后子进程,再加上进程间的并发性;导致了输出的多样性。输出次序带有随机性。 。 2 【进程的控制】 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句 话,在观察程序执行时屏幕上出现的现象,并分析原因。 【源代码】: #include int main int p1, p2; while p1 fork -1 ; if p1 0 ;第一个子进程 printf Child1 is running!\n ; else while p2 fork -1 ; if p2 0 ;第二子进程 printf Child2 is running!\n ; else ;父进程 printf Father is running!\n ; return 0; 运行多次,大部分运行后输出: Child1 is running! Child2 is running! Father is running! 少数输出: Child2 is running! Child1 is running! Father is running! Father is running! Child1 is running! Child2 is running! …… 理论上是有6种不同的结果,还是由于系统的调度算法,程序的并发性影响;但由于函数printf 在输出字符串时不会被中断因此字符串内部字符顺序输出不变与打印单字符的结果相同#include #include int main printf system call execl testing \n ; execlp date,date,0 ; printf exec error !\n ; return 0; 输出: system call execl testing 2009年 12月 04日 星期五 21:35:18 CST 输出结果分析: execlp是一种exec函数,当进程调用一种exec函数时,用指定的目标进程更好进程的执行映像。Exec调用成功后,调用进程的正文段被指定的文件的正文段所覆盖。调用成功时,exec不返回,从而不执行exec以后的所有语句,所以本例就只有输出“2009年 12月 04日 星期五 21:35:18 CST”的情况。如果调用失败,返回-1,执行剩余指令。 3 【进程信号处理】 编写程序使用系统调用 fork 创建两个子进程,再用系统调用 singal 让父进程捕捉键盘上来的中断信号 即按 Ctrl+c 键 ;当捕捉到中断信号后,父进程用系统调用 Kill 向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Process11 is Killed by Parent! Child Process

文档评论(0)

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

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

1亿VIP精品文档

相关文档