进程管理命令
进程id既能方便系统对进程的管理和调度,也方便用户对进程的管理。Linux系统中提供了许多进程管理命令,掌握这些命令,能帮助用户更好地管理进程,以及进程所需的相关资源。本节将对常用的进程管理命令进程讲解。
1、 ps
ps是“Process Status”的缩写。在命令行输入“ps”后回车就能查看当前系统中正在运行的进程。ps的命令格式如下:
ps [选项] [参数]
执行ps命令后终端打印的信息如下所示:
PID TTY TIME CMD
2670 pts/0 00:00:00 bash
3448 pts/0 00:00:00 ps
输出信息中包含4项:PID读者已经很熟悉,就是进程的id;TTY表明启动进程的终端机;TIME表示进程到目前为止真正占用CPU的时间;CMD表示启动该进程的命令。
ps命令可以与一些选项搭配,实现更丰富的功能。它的选项有两种风格:SysV和BSD。我们在第二章中学习的命令,其选项都是SysV风格。SysV风格的选项需要与“-”,一起使用,BSD风格的选项可以直接使用。
ps命令中常用的BSD风格的选项如表1所示。
表1 ps命令BSD风格的常用选项
参数 | 说明 |
---|---|
a | 显示当前终端机下的所有进程,包括其它用户启动的进程 |
u | 以用户的形式,显示系统中的进程 |
x | 忽视终端机,显示所有进程 |
e | 显示每个进程使用的环境变量 |
r | 只列出当前终端机中正在执行的进程 |
当使用选项u时,ps共会输出11项,使用“ps a”命令输出的信息如下所示:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
itheima 2670 0.0 0.1 108352 1836 pts/0 Ss 10:57 0:00 /bin/bash
itheima 2812 0.0 0.1 108352 1832 pts/1 Ss 11:54 0:00 /bin/bash
……
其中USER表示启动进程的用户,PID、TTY、TIME这些选项的含义与ps默认输出的相同,其余各项代表的含义分别如下:
● %CPU表示进程占用CPU的时间与进程已运行时间的百分比,一般情况下这个数值不会达到100%;
● %MEM表示进程的物理内存集与系统物理内存的百分比;
● VSZ表示虚拟内存集,即进程占用虚拟内存的大小(1024字节为一个单位);
● RSS表示驻留集大小,即进程使用的物理内存的大小(1024字节为一个单位);
● STAT表示进程当前的状态。D表示不可中断的睡眠态,R表示运行态,S表示可中断的睡眠态,T表示停止,Z表示僵死态,即僵尸进程。状态之后的“s”表示该进程是会话进程中的首进程。
● COMMAND即CMD,表示启动该进程的命令。
SysV格式的选项也能实现BSD风格选项所能实现的部分功能,SysV风格的选项如表2所示。
表2 ps命令SysV风格的常用选项
参数 | 说明 |
---|---|
-a | 显示所有终端机中除阶段作业领导之外的进程 |
-e | 显示所有进程,相当于BSD风格的选项a |
-f | 除默认显示外,显示UID、PPID、C、STIME项 |
-o | 指定显示哪些字段,字段名可以使用长格式,也可以使用“%字符”的短格式指定,多个字段名使用逗号分割 |
-l | 使用详细的格式显示进程信息,等同于BSD风格的选项l |
ps命令是最基本也是最强大的进程查看命令,它能够获取系统中当前运行的所有进程、查看进程的状态、占用的资源等等,也因此其选项非常之多,此处只列举出比较常用的11个选项,读者可以在Linux系统的man手册中查看该命令的更多选项,以掌握ps命令的更多功能。
2、 top
ps命令执行后,会显示执行命令那一刻系统中进程的相关信息,若想使信息动态地显示,可以使用命令top。top的命令格式如下:
top [选项]
top命令可以实时观察系统的整体运行情况,默认时间间隔为3秒,即每3秒更新一次页面,类似Windows系统中的任务管理器,是一个很实用的系统性能监测工具。在终端执行top命令后的界面如下:
图1 top默认输出信息展示
图1中第一行中显示的是top命令的相关信息,其中各项分别表示:系统当前时间为11:38:17;系统到现在已运行1小时14分;系统中当前有两个用户登陆;系统1分钟、5分钟、15分钟内的平均负载分别为1.00、0.71、0.51。
第二行显示与进程相关的信息:系统中共有161个进程,其中1个处于运行态,159个处于睡眠态,1一个处于停止状态,0个处于僵死态。
第三行显示与cpu相关的信息,若系统是单核的,这个信息只有一行;若系统是双核或多核的,每个cpu都会有对应的信息。其中各项分别表示:用户占用cpu的百分比为0.9%,系统占用cpu的百分比为1.6%,优先级被更改过的进程占用cpu的百分比为0.0%,空闲cpu的百分比为97.2%,I/O等待占用cpu的百分比为0.0%,硬中断占用cpu的百分比为0.0%,软中断占用cpu的百分比为0.0%,虚拟机被hypervisior(虚拟机监视器)偷去的时间所占的百分比为0.0%。
第四行显示与内存状态相关的信息:系统的物理内存总量为1004136k,已经使用的内存总量为730976k,空闲内存总量为273160k,缓存的内存量为52304k。
第五行显示swap交换分区的信息:交换区的总容量为2031612k,已经使用的容量为0k,空闲容量为2031612k,缓冲的交换区容量为344988k。
以上几行信息的显示可以通过热键l、t、m来分别控制。
第六行为一个空行,之后黑色背景行为top命令默认显示的输出项,pid等项不再赘述,其余尚未介绍的输出项代表的含义分别如下:
● PR:进程优先级。进程共有140个优先级,编号0~139,其中100~139为用户可控制的优先级,数字越小,优先级越高。
● NI:nice值,用来控制进程的优先级。取值范围为-20~+19,对应100~139号优先级,它与PR的关系为:new PR=PR+nice。
● VIRT:虚拟内存集大小,即进程使用的虚拟内存总量,单位为kb。
● RES:常驻内存集大小,即进程使用的未被换出的物理内存大小,单位为b。
● SHR:共享内存的大小,单位为kb。
● S:表示进程状态,对应ps命令中的STAT。
● %CPU:上次更新到现在的CPU时间占用百分比,top命令默认以此项排序。
● %MEM:进程使用的物理内存占总内存的百分比。
● TIME+:进程占用CPU的总时长,单位1/100秒。
热键c、M、P、T、w分别可以根据以上某个选项对top显示的信息进行排序。热键对应的功能如表3所示。
表3 top命令中热键功能
热键 | 说明 |
---|---|
l | 控制是否显示平均负载和启动时间(第1行) |
t | 控制是否显示进程统计信息和cpu状态信息(第2、3行) |
m | 控制是否显示内存信息(第4、5行) |
M | 根据常驻内存集RES大小为进程排序 |
P | 根据%CPU为进程排序 |
T | 根据TIME+为进程排序 |
r | 重置一个进程的优先级 |
i | 忽略闲置和僵死的进程 |
k | 终止一个进程 |
当使用热键r、k时,第6行会给出相应的提示,并等待输入。若要终止进程,在提示信息后输入要操作的进程的pid即可;若要重置优先级,按下热键r,输入pid后,第6行会提示输入nice值。
top的监测界面默认每隔3秒刷新一次,读者可以使用选项“-d”自定义刷新间隔;top显示的内容只有一屏,超出一屏的进程无法查看,若想查看更多进程的状态,可以使用选项“-b”,该选项使用批处理的模式进行操作,一次显示一屏,3秒滚动一次;若只想观察某段时间内的变化情况,可以使用选项“-n”来指定循环显示的次数。top的选项还有很多,读者可通过man手册学习更多内容。
3、 pstree
pstree命令以树状图的形式显示系统中的进程,可以直接观察到进程之间的派生关系。pstree命令的格式如下:
pstree [选项]
pstree命令中的常用选项如表4所示。
表4 pstree命令常用选项
参数 | 说明 |
---|---|
-a | 显示每个进程的完整命令(包括路径、参数等) |
-c | 不使用精简标识法 |
-h | 列出树状图,特表标明当前正在执行的进程 |
-u | 显示用户名称 |
-n | 使用程序识别码排序(默认以程序名称排序) |
4、 pgrep
pgrep命令根据进程名从进程队列中查找进程,查找成功后默认显示进程的pid。pgrep命令的格式如下:
pgrep [选项] [参数]
Linux系统中可能存在多个同名的进程,pgrep命令可以通过选项缩小搜索范围,其常用选项如表5所示。
表5 pgrep命令常用选项
参数 | 说明 |
---|---|
-o | 仅显示同名进程中pid最小的进程 |
-n | 仅显示同名进程中pid最大的进程 |
-p | 指定进程父进程的pid |
-t | 指定开启进程的终端 |
-u | 指定进程的有效用户id |
5、 nice
除了在使用top命令时通过热键r来重置进程优先级外,Linux系统中也提供了专门更改优先级的命令,即nice命令。nice命令的格式如下
nice [选项] [参数]
nice选项常用的选项为-n,n表示优先级,是一个整数。nice的选项通常为一个进程名。假设进程top的优先级为0,要修改bash的优先级为5,则可以使用以下命令实现:
nice –n 5 bash
修改后可使用top命令检测bash的优先级。
nice命令不但能修改已存在进程的优先级,还能在创建进程的同时,通过设置进程的nice值,为进程设定优先级。此时选项后的参数应为所要执行的命令。假设当前top命令的优先级已被设置为5,那么再次调用top命令,修改其优先级为11,则应使用的命令如下所示:
nice –n 6 top
当更改nice值时,优先级PR和nice值NI都会改变,其变化的规律为:新值=原值+n,n为本次命令中指定的nice值。
4、 bg和fg
Linux系统中的命令分为前台命令和后台命令,所谓前台命令,即在命令执行后,命令执行过程中的输出信息会逐条输出到屏幕,或命令打开的内容会替代原来的终端(如vi打开vim编辑器)的命令,比如压缩解压命令等;所谓后台命令,即命令执行后,不占用命令提示符,用户可继续在终端中输入命令,执行其它操作的命令。
Linux系统中可以使用bg命令和fg命令,使进程在前台和后台之间进行切换。
bg命令的作用是,将进程放入后台运行,使前台可以执行其它任务。其命令格式如下:
bg [参数]
也可以在命令后追加符号“&”,在进程创建时将其直接调入后台执行,其用法如下:
command &
使用快捷键组合Ctrl+Z也能将进程调入后台,但调入后台的进程会被暂时停止。
fg命令的作用与bg相反,是将后台的进程调往前台。其命令格式如下:
fg [参数]
假设要将后台的进程top调回前台,可以使用以下命令:
fg top
5、 jobs
当top命令或vi编辑器等前台进程正在运行时,按下快捷键Ctrl+Z,终端会在输出如下一行信息后,才返回命令提示符:
[1]+ Stopped top
这是一个作业的状态信息,1表示作业号,“Stopped”表示进程top现在被停止。作业其实就是进程,在前台与后台之间进行调度的进程被称为作业,一个作业可以对应一个或多个进程。
使用jobs命令可以查看Linux系统中的作业列表及作业状态,进程中的作业也有编号,编号从1开始。Linux系统中作业从用户角度进行编号,进程从系统管理员的角度进行编号。jobs命令的语法格式如下:
jobs [选项] [参数]
当选项和参数缺省时,默认显示作业编号、作业状态和启动作业的命令。
jobs命令的常用选项如表6所示。
表6 jobs命令常用选项
参数 | 说明 |
---|---|
-l | 显示进程号 |
-p | 仅显示作业对应的进程号 |
-n | 显示作业状态的变化 |
-r | 仅显示运行状态的任务 |
-s | 仅显示停止状态的任务 |
jobs命令的参数为作业号,用于显示某个作业的信息。该命令一般与bg、fg命令配合使用。
6、 kill
kill命令用来终止正在运行的进程,它的工作原理是发送某个信号到指定进程,以终止该进程。kill的命令格式如下:
kill [选项] [参数]
信号的详细内容将在第7章讲解,此处只介绍kill命令中最常用的信号:编号为15的信号SIGTERM和编号为9的信号SIGKILL。这两个信号的区别是:若使用信号15,kill命令会运行进程终止前,安置好正在进行的工作;若使用信号9,则进程会立即被终止,正在进行的修改将不会被保存。
kill命令的预设信息为SIGTERM(15),即默认情况下kill命令发送编号为15的信号SIGTERM以期终止进程。若该信号无法终止进程,可以使用编号为9的信号SIGKILL强制关闭进程。
使用指定信号(如信号SIGKILL)杀死一个进程的命令格式如下:
kill -9 PID