学科分类
目录
Linux编程

进程管理命令

进程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
点击此处
隐藏目录