实验二-1/8实验二进程管理实验指导书一、实验目的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文件写信息,父进程则从中读信息并输出到屏幕上。实验二-2/8三、实验步骤与结果分析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实验记录PIDTTYTIMECMD从当前终端窗口中,练习使用给出的每个选项的ps命令。解释ps-f命令输出的各栏标题的含义,将解释填入表2中表2ps-f栏标题值描述UIDPIDPPID实验二-3/8CSTIMETTYTIMECMD输入ps-f命令,显示运行在系统中进程的完全信息,填入表3中。表3实验记录UIDPIDPPIDCSTIMETTYTIMECMD步骤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|grepgedit(文本编辑器的进程名是“gedit”,查找和“gedit”调度守护进程相关的所有进程),记录文本编辑器的父进程的CMD是什么?实验二-4/8________________________________________________________3)在当前终端窗口中执行命令:pgrep–lgedit查找所有和“gedit”调度守护进程相关的进程。ps和pgrep命令输出之间有什么不同?________________________________________________________步骤6:按照用户查找一个进程。ps命令可以带-u(用户)选项使用,查找指定用户的进程。这个命令比ps-ef使用得更多,因为一般只能够管理属于自己的进程。我们可以通过用户登录名或者UID号来查找用户的进程。用户只能够终止自己的进程,但是超级用户可以终止系统中所有运行的进程。ps–ulogin-ID或UID1)用以姓名创建的用户名登录系统,启动计算器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-9process-id注意:对于shell之外的进程,把kill–9(SIGKILL)作为最后的选项,因为它是一种生硬的方法,不允许正确的进程终止。1)续步骤6,查看“计算器”进程的PID号是多少?________________________________________________________2)软杀死“计算器”程序,它是否还在桌面上运行?________________________________________________________3)打开4个虚拟终端,用ps–ef命令,观察这4个虚拟终端的进程标识符,它们的父进程是谁?________________________________________________________4)使用kill命令关闭虚拟终端窗口,该如何操作?有没有办法一次将4个虚拟终端窗口同时关闭?________________________________________________________________________________________________________________________________________________________________________________________实验二-5/8步骤8:运行pstree命令,,以树状结构观察当前的进程。步骤9:运行top命令观察系统当前的进程状况。步骤10:创建一个任务,请下午17:30关机,有几种方法,该如何操作。____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________3.进程的创建使用系统调用fork()可以创建进程,解释fork()函数的功能及使用方法;编辑编译并运行进程创建举例程序,观察记录屏幕上的显示结果,试分析原因。〈进程创建程序〉#includestdio.hmain(){intp1,p2;if(p1=fork())/*子进程创建成功*/putchar('b');else{if(p2=fork())/*子进程创建成功*/putchar('c');elseputchar('a');/*父进程执行*/}}______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________