收藏 分销(赏)

实验二-进程管理实验指导书Redhat版.doc

上传人:天**** 文档编号:3459739 上传时间:2024-07-06 格式:DOC 页数:9 大小:104KB 下载积分:6 金币
下载 相关 举报
实验二-进程管理实验指导书Redhat版.doc_第1页
第1页 / 共9页
实验二-进程管理实验指导书Redhat版.doc_第2页
第2页 / 共9页


点击查看更多>>
资源描述
实验二 进程管理实验指导书 一、实验目的 1.了解进程与程序的区别,加深对进程概念的理解; 2.掌握进程并发执行的原理,及其所引起的同步、互斥问题的方法; 3.掌握进程管理的常用命令及系统调用,并会用C语言实现系统调用。 二、实验内容 实验预备知识:学习LINUX或Windows中有关进程创建、控制的部分;查阅有关LINUX或Windows环境下API中的有关进程创建、控制的部分。(可参考教材2版P34和P69,3版P71) 1.熟悉进程管理常用命令,并完成下列任务: ⑴ 在LINUX下,试用ps命令的各个选项观察系统中诸进程的运行情况; ⑵ 在LINUX下,试用pstree命令观察系统进程的层次; ⑶ 在LINUX下,试用top等命令观察系统中进程运行情况和CPU工作情况; ⑷ 在LINUX下,试用kill、killall、skill等命令来终止进程; ⑸ 在LINUX下,试用at、crontab命令进行进程调度。 2.学习进程管理类系统函数,并用C语言完成下列任务: ⑴ 进程的创建 编写程序,创建两个子进程。当此程序运行时,系统中有一个父进程和两个子进程。父进程在屏幕上显示“a”,子进程分别在屏幕上显示“b”和“c”。 ⑵ 进程控制 如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 ⑶ 进程通信 建立一管道pipe文件,同时父进程创建子进程。父子共同在此pipe文件上操作,子进程负责向该pipe文件写信息,父进程则从中读信息并输出到屏幕上。 实验二- 9 / 9 三、实验步骤与结果分析 1.Linux的进程 回顾进程的概念。使用此前的信息,完成以下填空: 1) Linux系统中,几乎每一个启动的进程,都会由内核分配一个唯一的_______________,用于跟踪从进程启动到进程结束。 2) 当启动新进程的时候,内核也给它们分配系统资源,如________和________。 3) 永远不向父进程返回输出的进程叫做______________。 4) 由父进程派生出来的进程叫做__________________进程。 5) ________________进程是一个派生另一个进程的进程。 6) 运行用于提供服务的Linux系统进程是_______________。 7) 如果父进程在子进程之前结束,它创建了一个______________进程。 2.Linux的进程管理命令 步骤1:进入GNOME。 步骤2:访问命令行。写出在GNOME中,打开终端窗口的操作(至少两种方法): _____________________________________________________________________________________________________________________________________ ____ 步骤3:ps命令用于列出当前系统中运行的进程,回顾ps命令。 基本的ps命令显示在当前shell中的进程信息。输入ps命令,将结果填入下表1中。  表1 实验记录 PID TTY TIME CMD                   从当前终端窗口中,练习使用给出的每个选项的ps命令。 解释ps -f命令输出的各栏标题的含义,将解释填入表2中 表2 ps -f栏标题 值 描述 UID PID PPID C STIME TTY TIME CMD 输入 ps -f 命令,显示运行在系统中进程的完全信息,填入表3中。  表3 实验记录 UID PID PPID C STIME TTY TIME CMD                                                    步骤4:列出系统中运行的所有进程。 输入 ps -ef 命令,显示运行在系统中的各个进程的完全信息。执行该命令,并与ps –f命令的输出结果对照,一致吗?有何不同? __________________________________________________________________________________________________________________________________________________________ ____ 注意分析当前终端窗口中的输出结果: 1)显示了多少个进程?(提示可以使用top命令) ____________________________________________________ ____ 2)当前使用的SHELL的进程ID的PID是什么? ____________________________________________________ ____ 3)启动SHELL的进程的命令 (CMD) 是什么? ____________________________________________________ ____ 4)请观察,什么命令的PID号是1? ____________________________________________________ ____ 5)再次运行ps –ef命令,计算进程的数目: ____________________________________________________ ____ 步骤5:根据命令名搜索特定的进程。 为了终止一个进程,必须找到该进程的PID。大多数运行的系统中,有上百个进程在运行,ps -ef的列表可能很长。如果知道启动进程的执行程序的名字,可以更快地找到PID。 通过把ps命令的输出结果输入到grep中,可以搜索想要终止的特定进程,确定正确的PID。 grep命令可以在其他命令的输出中搜索所有类型的特征字符串。 1)启动文本编辑器(gedit)程序,再次计算进程的数目,看有什么变化? ____________________________________________________ ____ 2)在当前的终端窗口中,执行命令: ps –e | grep gedit (文本编辑器的进程名是“gedit”,查找和“gedit”调度守护进程相关的所有进程) ,记录文本编辑器的父进程的CMD是什么? ____________________________________________________ ____ 3)在当前终端窗口中执行命令: pgrep –l gedit 查找所有和“gedit”调度守护进程相关的进程。ps和pgrep命令输出之间有什么不同? ____________________________________________________ ____ 步骤6:按照用户查找一个进程。 ps命令可以带 -u (用户) 选项使用,查找指定用户的进程。这个命令比ps-ef使用得更多,因为一般只能够管理属于自己的进程。我们可以通过用户登录名或者UID号来查找用户的进程。用户只能够终止自己的进程,但是超级用户可以终止系统中所有运行的进程。 ps –u login-ID或UID 1)用以姓名创建的用户名登录系统,启动计算器GNOME应用程序。 2)使用带 -u选项的ps命令,查找以登录ID (例如,以姓名创建的用户,登录ID为用户名)运行的所有进程。计算器应用程序的PID是什么? ____________________________________________________ ____ 3)使用ps -u命令组合grep,查找“计算机”程序的PID号,而不是使用ps -u查找整个列表。使用什么命令? 提示:猜猜“计算器”程序的命令名中可能有哪个字母,使用grep搜索那些字母。 ____________________________________________________ ____ 步骤7: 使用kill命令终止一个进程。 信号用于终止、挂起和继续进程。有时候使用Ctrl + c可以终止一个不响应的进程。这样向进程发送一个中断 (INT) 信号,终止它及所有它派生的子进程。 kill命令提供了一个终止不想要的命令进程的直接方法。当想停止一个运行了很长时间的命令的时候,或者当需要终止一个不能够正常退出的进程的时候,它很有用。指定PID正常地杀死一个进程。 kill [-signal] process-id 为了使用kill命令终止一个进程,应该首先键入ps找出进程的PID,然后键入kill紧跟着PID。如果使用kill而没有指定信号,则信号15 (SIGTERM) 将被发送给特定PID号的进程。这叫做软杀死,通常终止了进程。如果可能,最好软杀死进程,这样它可以正确地关闭文件,温和地终止进程。 如果需要强制终止一个进程,可以使用带 -9选项的kill命令。这个选项叫做强制杀死,当shell对所有其他终止信号都不响应的时候,需要使用它来杀死shell。 kill -9 process-id 注意:对于shell之外的进程,把kill –9 (SIGKILL) 作为最后的选项,因为它是一种生硬的方法,不允许正确的进程终止。 1)续步骤6,查看“计算器”进程的PID号是多少? ____________________________________________________ ____ 2)软杀死“计算器”程序,它是否还在桌面上运行? ____________________________________________________ ____ 3)打开4个虚拟终端,用ps –ef命令,观察这4个虚拟终端的进程标识符,它们的父进程是谁? ____________________________________________________ ____ 4)使用kill命令关闭虚拟终端窗口,该如何操作?有没有办法一次将4个虚拟终端窗口同时关闭? ________________________________________________________________________________________________________________________________________________________________________________________ 步骤8:运行pstree命令,,以树状结构观察当前的进程。 步骤9:运行top命令观察系统当前的进程状况。 步骤10:创建一个任务,请下午17:30关机,有几种方法,该如何操作。 __________________________________________________________________________________________________________________________________________________________ ____ ______________________________________________________________________________________________________________________________________________________________________________ 3.进程的创建 使用系统调用fork()可以创建进程,解释fork()函数的功能及使用方法;编辑编译并运行进程创建举例程序,观察记录屏幕上的显示结果,试分析原因。 〈进程创建程序〉 #include<stdio.h> main() { int p1,p2; if(p1=fork()) /*子进程创建成功*/ putchar('b'); else { if(p2=fork( )) /*子进程创建成功*/ putchar ('c'); else putchar ('a'); /*父进程执行*/ } } _____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ _____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 4.进程的控制 将每个进程输出一个字符改为每个进程输出一串字符,运行已修改好的程序再观察程序执行时屏幕出现的现象,并分析原因。 〈进程创建程序举例——输出字符串〉 #include<stdio.h> main() { int p1,p2,i; if(p1=fork()) { for(i=0;i<500;i++) printf("parent%d\n",i); wait(0); /* 保证在子进程终止前,父进程不会终止*/ exit(0); } else { if(p2=fork()) {for(i=0;i<500;i++) printf("son %d\n",i); wait(0); /* 保证在子进程终止前,父进程不会终止*/ exit(0); /*向父进程信号0且该进程推出*/} else {for(i=0;i<500;i++) printf("grandchild %d\n",i); exit(0);} } } _____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,解释lockf()函数的功能及用法,运行下面给出的进程控制程序观察并分析出现的现象。 〈进程控制程序举例〉 #include<stdio.h> main() { int p1,p2,i; if(p1=fork()) { lockf(1,1,0); for(i=0;i<500;i++) printf("parent %d\n",i); lockf(1,0,0); wait(0); /* 保证在子进程终止前,父进程不会终止*/ exit(0); } else { if(p2=fork()) { lockf(1,1,0); for(i=0;i<500;i++) printf("son %d\n",i); lockf(1,0,0); wait(0); /* 保证在子进程终止前,父进程不会终止*/ exit(0); } else { lockf(1,1,0); for(i=0;i<500;i++) printf("daughter %d\n",i); lockf(1,0,0); exit(0); } } } ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ _____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 5.进程的管道通信 使用系统调用pipe()可以创建进程,解释pipe()、write()、read()函数的功能及使用方法;编辑编译并运行进程管理通信程序,观察并分析程序运行结果。 〈进程的管道通信程序举例〉 #include <unistd.h> #include <signal.h> #include <stdio.h> int pid1,pid2; main( ) { int fd[2]; char outpipe[100],inpipe[100]; pipe(fd); /*创建一个管道*/ while ((pid1=fork( ))==-1); if(pid1==0) { lockf(fd[1],1,0); sprintf(outpipe,"child 1 process is sending message!"); /*把串放入数组outpipe中*/ write(fd[1],outpipe,50); /*向管道写长为50字节的串*/ sleep(5); /*自我阻塞5秒*/ lockf(fd[1],0,0); exit(0); } else { while((pid2=fork( ))==-1); if(pid2==0) { lockf(fd[1],1,0); /*互斥*/ sprintf(outpipe,"child 2 process is sending message!"); write(fd[1],outpipe,50); sleep(5); lockf(fd[1],0,0); exit(0); } else { wait(0); /*同步*/ read(fd[0],inpipe,50); /*从管道中读长为50字节的串*/ printf("%s\n",inpipe); wait(0); read(fd[0],inpipe,50); printf("%s\n",inpipe); exit(0); } } } _________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 6.实验小结、建议和体会 ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 2010年读书节活动方案 一、     活动目的: 书是人类的朋友,书是人类进步的阶梯!为了拓宽学生的知识面,通过开展“和书交朋友,遨游知识大海洋”系列读书活动,激发学生读书的兴趣,让每一个学生都想读书、爱读书、会读书,从小养成热爱书籍,博览群书的好习惯,并在读书实践活动中陶冶情操,获取真知,树立理想! 二、活动目标: 1、通过活动,建立起以学校班级、个人为主的班级图书角和个人小书库。 2、通过活动,在校园内形成热爱读书的良好风气。 3、通过活动,使学生养成博览群书的好习惯。 4、通过活动,促进学生知识更新、思维活跃、综合实践能力的提高。 三、活动实施的计划 1、 做好读书登记簿 (1) 每个学生结合实际,准备一本读书登记簿,具体格式可让学生根据自己喜好来设计、装饰,使其生动活泼、各具特色,其中要有读书的内容、容量、实现时间、好词佳句集锦、心得体会等栏目,高年级可适当作读书笔记。 (2) 每个班级结合学生的计划和班级实际情况,也制定出相应的班级读书目标和读书成长规划书,其中要有措施、有保障、有效果、有考评,简洁明了,易于操作。 (3)中队会组织一次“读书交流会”展示同学们的读书登记簿并做出相应评价。 2、 举办读书展览: 各班级定期举办“读书博览会”,以“名人名言”、格言、谚语、经典名句、“书海拾贝”、“我最喜欢的___”、“好书推荐”等形式,向同学们介绍看过的新书、好书、及书中的部分内容交流自己在读书活动中的心得体会,在班级中形成良好的读书氛围。 3、 出读书小报:
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 技术指导

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服