- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统实验指导 -以Linux系统为主 实验二 Linux的进程管理 一. 实验目的 (1)加深对进程概念的理解,明确进程和程序的区别。 (2)进一步认识并发执行的实质。 (3)掌握使用Linux命令管理和操作进程的方法。 二. 实验预备知识 (1)阅读Linux的sched.h源码文件,加深对进程管理概念的理解。 (2)阅读Linux的fork.c源码文件,分析进程的创建过程。 三. 实验内容 (1)进程的创建 编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每个进程在屏幕上显示一句话和进程ID,试观察记录屏幕上的显示结果,并分析原因。 (2)创建进程扇、进程链和进程树。 (3)使用fork-exec组合,用新创建的进程执行一个新的任务。 (4)使用一些Linux命令操作和管理进程。 四. 试验总结 (1) 写出试验报告。 (2) 根据试验结果,绘制出进程扇、进程链和进程树,并分析原因。 进程标识 成员名:pid_t pid 功能: 内核通过pid标识每个进程 pid与进程描述符之间有严格的一一对应关系 数据类型说明: pid_t实际上是一个int类型 取值范围:0 ~ 32767 最大值修改:/proc/sys/kernel/pid_max 获取进程pid : getpid() sys_getpid() 1.fork( ) 创建一个新进程 int fork( ) 该系统调用是“单调用双返回”。具体为:在子进程中返回0;在父进程中返回子进程id;出错为-1 2. void exit(int status); 无返回 参数0正常结束,1异常结束 3. int execl ( char *pathname,char *arg0,…,char *argn, (char *) 0); 第一个是路径名,后面的是命令行参数,最后以空指针结尾。 返回:若出错为-1,成功无返回。 4. pid_t wait(int *status); 返回:若成功则为进程ID,若出错为-1。 系统调用函数说明、参数值及定义 fork()函数 说明 子进程完全复制父进程的资源 子进程的执行独立于父进程 进程间数据共享需通过专门的通信机制来实现 返回值 fork( )函数是一个单调用双返回的函数。由父进程调用,执行成功时,在父进程中返回子进程标识(pid),在子进程中返回0; 用失败返回-1 通过ps命令获取进程信息 * 第二章 处理器管理 进程等待 函数原型: pid_t wait(int *status); pid_t waitpid(pid_t pid, int *status, int options); 说明: 均通过wait4()系统调用实现 进程终止时,会向父进程发送SIGCHLD信号 调用wait( )和waitpid( )的进程的可能状态: 阻塞 如果子进程还在运行 正常返回 返回子进程的终止状态(其中一个子进程终止) 出错返回 没有子进程 进程创建fork()的程序示例(1) #includestdio.h #includeunistd.h #includesys/types.h main() { pid_t pid; pid=fork(); if(pid= =0) { printf(“Hello,I’m a child process.\n”); } else{printf(“Hello,I’m a parent process.\n”); }exit(0); } 编译creat.c并运行: $ gcc creat.c $ ./a.out Hello,I’m a child process. Hello,I’m a parent process. 父子进程执行线索 进程创建fork()的程序示例(2) 创建进程 #includestdio.h #includeunistd.h #includesys/types.h main(void) { int i, n=5; pid_t pid; for(i=1;in;i++) if((pid=fork()) = =0) break; fprintf(stderr,“This is process %ld with parent %ld \n”,getpid(),getppid()); exit(0); } 试将关系式分别改为0和0的情况,运行并分析结果。 扇
您可能关注的文档
- 实施科教兴国的发展战略00.ppt
- 实体店如何营销汇总.ppt
- 实务培训课件.ppt
- 实施高效课堂改革的几个关键问题.ppt
- 实时数字信号处理第2章计算单元.ppt
- 实现人生意义.ppt
- 实习课件(河南理工大学工程训练中心).ppt
- 实用性锅炉常见的事故处理.ppt
- 实用文体写作教学成果奖申报.ppt
- 实用类、论述类文本阅读.ppt
- 某县纪委监委开展“校园餐”突出问题专项整治工作汇报22.docx
- 中小学校园食品安全与膳食经费管理专项整治工作自查报告66.docx
- 某县委常委、宣传部部长年度民主生活会“四个带头”个人对照检查发言材料.docx
- XX县委领导班子年度述职述廉报告3.docx
- 某县纪委关于校园餐问题整治工作落实情况的报告.docx
- 中小学校园食品安全与膳食经费管理专项整治工作自查报告22.docx
- 某县税务局党委领导班子年度民主生活会“四个带头”对照检查材料.docx
- 某县委书记在县委常委班子年度民主生活会专题学习会上的讲话.docx
- 某县纪委校园餐问题整治工作落实情况的报告.docx
- 某区委副书记、区长年度民主生活会对照检查材料.docx
文档评论(0)