版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三次小课 Linux进程 与线程,华软软件工程系,创建进程实验课主要内容 本周大课内容回顾 通过实验理解Linux进程家族树、父子进程简单同步的实现,主要内容,第一部分 本周大课 内容回顾,同步与互斥,大课回顾,什么是临界资源?进程同步和互斥的定义? 进程死锁的概念? 用PV原语实现互斥的一般方法?信号量初值? 用PV原语实现同步的一般方法?信号量初值?,第二部分 Linux进程 实验,实验1 Linux进程家族树,文件名3-1.c:看程序写结果。 #include main() fork(); printf(“it will be printed twicen”); 要求: 增加1个for
2、k()、2个fork()、多个fork()的结果会怎样?并说明原因,找出规律。 在fork()语句后添加如下2条语句,结果将如何? printf(“get the child pid: %dn”,getpid(); printf(“get the parent pid: %dn”,getppid();,3-1.c,#include main() fork(); printf(“it will be”); printf(“get the child pid: %dn”,getpid(); printf(“get the parent pid: %dn”,getppid(); ,init进程,in
3、it进程是系统所有进程的起点,内核在完成内核引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。init进程是所有进程的发起者和控制者。因为在任何基于UNIX的系统(比如 Linux)中,它都是第一个运行的进程,所以init进程的编号(Process ID,PID)永远是1。如果init出现了问题,系统的其余部分也就随之不可用。,init进程,init进程有两个作用: 扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了
4、父进程的子进程都会以init作为它们的父进程。快速执行一下“ps af”或者top或者gnome-system-monitor命令,可以列出当前运行的进程来。 在进入某个特定的运行级别(Runlevel)时运行相应的程序,以此对各种运行级别进行管理。,实验2 父子进程同步实验,文件名3-2.c:实现子进程先输出”child proc”,父进程后输出” parent proc”。 要求 请总结实现简单的父子进程同步的一般方法,3-2.c,#include #include main() int p1; while(p1=fork()=-1); if(p10) wait(0); printf(pa
5、rent procn); else printf(child procn); exit(0); printf(“test1n); printf(“test2n); ,Linux中父子进程同步,相关系统调用 1)进程终止 void exit(stat); 主要任务:自我终止,将进程状态变为”僵死”状态,等待父进程用wait系统调用来收集。 一般参数可设为0,即exit(0) exit():在执行该函数时,进程会检查文件打开情况,清理I/O缓存,如果缓存中有数据,就会将它们写入相应的文件,这样就防止了文件数据的丢失!然后终止进程。,Linux中父子进程同步,_exit():在执行该函数时,并不清理
6、标准输入输出缓存,而是直接清除内存空间,当然也就把文件缓存中尚未写入文件的数据给销毁了。由此可见,使用exit()函数更加安全。 父进程等待子进程终止 pid_t wait(int *stat_addr, 0) 一般参数可设为0,即wait(0),实验3 子进程映像的重新装入,创建一进程child.c,功能是输出”I am a child.”,再创建一个父进程3-3.c加载该子进程 。 要求 理解子进程映像的重新装入。,Linux中子进程映像的重新装入,Linux提供了一组系统调用exec函数,主要功能是将指定的可执行文件加载到指定的进程映像中,覆盖该进程映像中原有的程序。 此类系统调用有ex
7、ecl()、execle()、execlp()、execv()、execve()、execvp() 本课只介绍execl()和execv() execl(“路径名/文件名”,0) execv(file,argv) 参数定义: char *file 指向文件全名(路径名/文件名)的指针; char *argvn指向命令及参数的指针。 加载成功则直接执行,不返回;不成功返回-1,Child.c,#include #include main() printf(I am a childn); exit(0); ,创建一个child.c源文件并编译成child执行文件,3-3.c,#include #i
8、nclude #include void main() int p; while(p=fork()=-1); if(p=0) execl(“./child”,0,NULL); /调用child文件,第三参数需要一个空指针,用null代替 else wait(0); exit(0); ,实验4 子进程映像的重新装入,创建一进程child1.c,再创建一个父进程3-4.c加载该子进程 。 要求 理解子进程映像的重新装入。 掌握exec类函数的用法及功能。 3-4.c:改写子进程的功能为调用键盘命令ls l,已知该键盘命令的路径与文件名为:/bin/ls 在子进程分支中,用execl加载自己的程序后,添加一条语句如 printf(“ok!n”); 结果将如何?,Child1.c,#include #include #include main() char* path=/bin/ls; char* argv4=ls,-a,NULL; execv(path,argv); exit(0); ,3-4.c,#include #include #includ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江西聆康医疗设备有限公司招聘11人备考题库及完整答案详解
- 2026广东东莞滨海湾未来学校采购员招聘1人备考题库及答案详解1套
- 2026浙江杭州西湖区卫健局所属事业单位招聘12人备考题库附答案详解(模拟题)
- 2026春季江西铜业集团有限公司贵溪冶炼厂校园招聘变更20人备考题库附答案详解(模拟题)
- 中国稀土集团有限公司2026届春季校园招聘备考题库含答案详解(模拟题)
- 2026贵州省住房资金管理中心招聘工作人员1人备考题库附答案详解(基础题)
- 2026塔城地区审计局招聘编制外聘用人员备考题库(2人)参考答案详解
- 2026天津海河金岸投资建设开发有限公司社会招聘1人备考题库及答案详解参考
- 基于机器学习的深部开采地质灾害预测-洞察与解读
- 全钒液流电池电解质稳定性调控机制研究-洞察与解读
- 2026年江苏南京市高三二模高考物理试卷试题(含答案详解)
- 第13课 每个人都有梦想 课件(内嵌视频)2025-2026学年道德与法治二年级下册统编版
- 2026四川省成都广定发展集团有限公司招聘3人备考题库(含答案详解)
- 2026四川成都市公共交通集团有限公司招聘投资管理专员岗位备考题库附答案详解(b卷)
- 金属材料的基础知识
- 煤矿在用主通风机系统安全检测检验规范
- GB/T 19001-2016质量管理体系要求
- MCGS 项目7:组态应用实例
- GA/T 1494-2018路面结冰监测系统通用技术条件
- FZ/T 52039-2014再生聚苯硫醚短纤维
- 徐霞客人物介绍分析课件
评论
0/150
提交评论