实验报告学院:专业:班级:成绩:姓名:学号:组别:组员:实验地点:实验日期:指导教师签名:实验8项目名称:进程管理1、实验目的理解进程管理的基本原理方法,掌握在Linux系统中查看进程状态、控制进程以及调整进程优先级等基本方法。
2、实验内容2.1 进程管理的基本概念什么是进程管理?要理解这个概念,就必须理解什么是进程。
进程是在《操作系统原理》课程中的一个核心概念。
进程(Process)是程序的一个执行过程。
进程需要占用各种系统资源,包括CPU、内存等,需要读写各类文件,调用各种系统功能。
自然,从进程的创建到撤销,操作系统会为它安排一切。
不过,操作系统的安排是根据固定的算法所进行,纵使这些算法能根据当前情况不断调整,但不可能预先知道你的需要,然后让某个进程在特定某个时间挂起,让某个进程的优先级升高等等。
因此,进程管理是指根据当前实际需求,对进程加以特定的控制。
作为一个管理员,定时查看当前系统中各个进程的具体状态,捕捉各种进程运行的异常,合理分配各类资源,特别是CPU资源给不同的进程,对各类进程有计划地控制等等,都属于进程管理的内容。
系统为管理员提供了一系列的工具和命令,以让管理员完成管理工作。
2.2进程管理的基本方法2.2.1查看进程状态获知进程状态是进程管理的第一步。
UNIX系统为进程留了许多接口、命令和工具。
最典型的是/proc文件系统。
这是一个特殊的文件系统。
在此文件系统中,每个目录对应于一个进程,目录的名称即为进程的PID号。
进入某个进程对应的目录,里面有若干文件,这些文件记录了该进程当前运行的各种相关状态信息。
应用程序可通过对这些文件打开并读取(部分甚至还能通过写文件控制进程)来获取进程信息。
例子:查看/proc文件系统#cd /proc/#ls0 12294 16392 213144 28686 376918 53274 688280 8642561 1245238 163974 217238 295118 381008 561308 69666 876674 ……#cd 1#ls#cred lwp psinfo sigact status对于管理员,更常用的方法是利用ps命令来获知进程的基本状态。
请参考以下例子并完成问题。
命令:ps功能:列出当前活动进程的状态格式:ps [选项] [参数]选项:如果不使用任何选项,则列表显示当前工作站的活动进程,并且仅显示部分字段的内容。
由于关于ps的选项很多,没必要全部列出并记忆,更常用的做法是记住一些有特定功能的选项组合。
常用的选项含义如下:-f:生成一个长列表(部分字段仍然省略了,但比不加该选项的要多)-l(list):显示进程的全部列表字段信息-e:显示除内核进程外的全部进程-a:显示用户的全部进程-u(user):显示特定用户的进程,-k(kernel):显示内核进程ps命令的一些常见的选项组合示例如下:(1)仅显示当前工作站的活动进程# psPID TTY TIME CMD270396 pts/9 0:00 ps725186 pts/9 0:00 –bash(2)显示系统中除内核外的所有进程# ps -e -fUID PID PPID C STIME TTY TIME CMDroot 1 0 0 Aug 24 - 0:02 /etc/init……Zianed 1343542 741620 0 19:29:52 - 0:00 sshd: Zianed@pts/1(3)显示关于特定用户的进程# ps -lu userF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD40001 A 85287 421918 905408 0 60 20 1d966400 1012 - 0:00 sshd 240001 A 85287 503876 421918 0 60 20 3b49400 1168 f1000600021e1478 pts/7 0:00 bash(4)显示系统内核的进程# ps -kPID TTY TIME CMD0 - 0:29 swapper8196 - 2395:12 wait12294 - 0:00 sched(5)查看各个进程占用CPU的情况#ps auxUSER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMAND root 8196 12.1 0.0 384 384 - A Aug 24 3630:51 wait……上述每个例子返回结果都是以列表形式出现,列表中主要字段的含义如下,●PID:进程标识号●PPID:进程的父进程标识号●UID:进程所属的用户ID●TTY:进程所属的终端号●TIME:进程的执行时间总和●CMD(command):进程的命令名●STIME:进程的启动时间●PRI(priority):进程的优先级,数字越大优先级越低●NI(nice):进程的谦让度●S(status):进程的状态,对于一般进程主要状态有:A(活动的)、T(已停止)、Z(已取消)等。
对于内核进程主要状态有:R(正在运行)、S(休眠)、T(已停止)、Z(已取消)等。
2.2.2控制作业的基本操作除对进程进行控制外,作业(job)是另一个与进程控制密切相关的概念。
简单来说,作业是用户向系统提交的一个任务请求,系统根据请求创建相应的进程完成该任务。
用户每输入的一个shell命令其实都是一个作业,这个作业经解释后对应于一个到多个进程加以执行。
作业可以在前台执行,这是用户可以跟作业进行交互。
当用户并不需要与作业交互,则作业也可以在后台执行。
如果用户想作业启动之初就让其在后台运行,就需要在关于该作业的shell命令结尾加上“&”。
作业执行时有作业号,用户可根据作业号对作业进行相应的控制,最基本的控制是将作业在终端的前后台之间切换。
命令:jobs功能:查看当前用户的作业情况格式:jobs命令:bg功能:将前台作业切换到后台执行格式:bg 作业号命令:fg功能:将后台作业切换到前台执行例子:作业控制的基本命令。
# vi jobtest &[1] 1110094# jobs -l[1]+ 1110094 Stopped vi jobtest#fg 1 将作业1调出调到前台,按ctrl+z可将其切换到后台vi jobtest~~……# bg 1 利用bg命令将作业1调到后台(功能与ctrl+z一样)[1]+ vi dd &2.2.3进程与信号量在UNIX系统中,用户可通过向进程发送相应的信号量来控制进程。
AIX中一些常用的信号量如下,信号量旁的括号内标示的是该信号量的编号:●SIGINT(2):程序终止(interrupt)信号,用于通知前台进程组终止进程,用户键入ctrl+c后前台进程终止。
●SIGQUIT(3):与SIGINT相似,进程终止后会生成文件core,用户键入ctrl+\后进程终止。
●SIGKILL(9):该信号不能被忽略,因此常用于强行终止某进程。
●SIGTSTP(18):终止进程,但该信号可以被处理和忽略. 用户键入ctrl+z发出这个信号,进程转入后台并挂起。
命令:kill功能:向特定某个进程发送信号。
格式:kill -信号编号进程PID例子:利用kill命令向进程发送信号。
#vi test &[1] 761968#kill -9 761968[1]+ Stopped vi test#ps -aPID TTY TIME CMD761976 pts/11 0:00 ps1032196 pts/15 0:00 ksh1359972 pts/0 0:00 ksh[1]+ Killed vi test例子:利用kill命令列出所有的信号量及其编号#kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU25) SIGXFSZ 27) SIGMSG 28) SIGWINCH 29) SIGPWR30) SIGUSR1 31) SIGUSR2 32) SIGPROF 33) SIGDANGER34) SIGVTALRM 35) SIGMIGRATE 36) SIGPRE 37) SIGVIRT38) SIGALRM1 39) SIGW AITING 60) SIGKAP 61) SIGRETRACT62) SIGSOUND 63) SIGSAK2.2.4进程与优先级进程的优先级是指系统在进程调度时用于判决进程是否能够获取CPU的依据。
进程的优先级越高,则越能在竞争中胜出而获得CPU时间。
在Linux系统中,进程的优先级以一个整数表达,数值越低,优先级越高。
每个普通进程的优先级默认为60。
根据动态优先级原理,操作系统会在调度进程的过程中对进程优先级进行调整。
同时,管理员可以根据实际需要自行对某些进程的优先级加以调整。
这里涉及到另外一个概念,进程的“nice”值。
nice值可翻译为“谦让度”,因为nice是一个从-20~19的值,nice默认等于0(也即不起作用),进程的nice值为负数时,其优先级升高(也即代表优先级的数值下降),而进程的nice值为正数时,则进程的优先级下降(也即优先级的数值升高了)。
在Linux中,普通用户一般只能调高优先级数值,也即让自己的进程“谦让”一点。
如果要让某个服务进程能够及时响应请求,可将其nice值提高。
命令:nice功能:设定要启动的程序的优先级格式:nice -增量启动的命令及其选项和参数,nice=原nice值+增量,nice默认为0。
命令:renice功能:调整进程的优先级格式:renice -n增量进程PID号例子:nice命令与renice命令的使用,注意进程的优先级(PRI)和nice值(NI)的变化。
# nice -2 vi~~~~按ctrl+z将vi程序切换到后台# ps -alF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 200811 T 85287 749588 757858 0 64 22303f1400 876 pts/15 0:00 vi # renice -n 5 749588# ps -alF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 200811 T 85287 749588 757858 0 74 27303f1400 876 pts/15 0:00 vi2.3 守护进程Linux在启动时需要启动很多系统服务,提供这些服务的程序是由运行在后台的守护进程(daemons)来执行的。