- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验三Linux进程并发程序设计
湖北工业大学工程技术学院实验报告
课程名称: 操作系统 实验内容: 实验三Linux进程并发程序设计 学院: 工 程 技 术 学 院 专业班级 11gb软件2班日期: 2013.11.7 教师: 贺红艳 成绩: 一、实验目的 1、掌握Linux环境下的进程并发程序的控制。 2、掌握gcc编译过程
二、预习内容 1、gcc编译器
GNU C 编译器 GCC gcc [options] [filenames]
不用任何选项编译一个程序时, GCC 将会建立 假定编译成功 一个名为a.out 的可执行文件. 例如, gcc test.c 将在当前目录下产生一个叫a.out 的文件: 用 -o 编译选项来为将产生的可执行文件指定一个文件名来代替 a.outgcc -o count count.c 注意: 当你使用 -o 选项时, -o 后面必须跟一个文件名.“pid %d\n”,getpid ;
(3)getppid
取得目前进程的父进程识别码。
系统调用格式: int getppid 例如:#include main printf “My parent’s pid %d\n”,getpid ;
(4)进程同步
pid wait stat-addr ;
其中,pid是中止的子进程的pid号,stat-addr是子进程结束时返回的状态信息存放的地址。如果只对进程的同步感兴趣,可以简写为wait 0 ;执行系统调用wait暂停父进程的执行,使之处于等待状态,一旦子进程执行完毕,处于等待的父进程会被唤醒重新进入执行,这样可以保证子进程与父进程的执行同步。
(5)进程的终止
exit status ;
通过该系统调用进程可以自己终止自己的运行,使进程进入僵死状态。这时被终止的进程释放它占有的所有资源,但保留进程控制块的内容(即或proc结构的内容)。其中status是一个整数,它作为一种结束时的状态传递给该进程的父进程。
(6)进程创建程序实示例:
#include main int p1; while p1 fork -1 ; if p1 0 printf “This is a child process.” ; /*在子进程中*/ else /*在父进程中*/ printf “This is a parent process.” ; 二、实验步骤 1、简单C程序的运行。
1)?
2)?
#include
main printf “hello world”\n” ;
printf “Wellcome!”\n” ; 3) 编译 :gcc –o test test.c
4 修改test 文件的访问权限,使其可以被执行。chmod a+x /test
4 运行 ./test
2、编写一段程序,使其完成:父进程创建两个子进程,每个进程都在屏幕在显示自己的进程ID号以及其父进程的ID号。
写出实验步骤与结果:
3、
#include
#include
main // ①
int pid fork ;?
// ②??
if pid 0 sleep 3 ; printf Child: pid %d, ppid %d\n, getpid , getppid ; else printf Parent: Child %d, pid %d, ppid %d\n, pid, getpid , getppid ; wait 0 ;?//④ printf After Child ends.\n ;???//?⑤ printf In which process?\n ; // ③ 写出程序,并分析执行结果,并回答In which process?问题。
子进程先sleep3秒,父进程先打印,然后等待子进程结束。
第一个In which process?在子进程中
第二个In which process?在父进程中 4、把第3题中位置③处分别移至位置①和②处,分析执行结果,并回答In which process?问题。
In which process?只在父进程中执行
In which process?在父字进程中都会先执行 5、程序修改:将第3题中程序中④⑤去掉,写出程序结果,并分析原因。
子进程在父进程结束后依然存在,子进程变成孤儿进程,有1号进程接管。 三、总结 利用fork创建子进程,当返回值等于0的时候处于子进程中,大于0时为子进程的进程号,为父进程。
子进程会复制fork函数以下的所有语句。
Fork函数可以嵌套 四、评语
原创力文档


文档评论(0)