目录
1、概述
Linux系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。
进程最根本的属性是动态性和并发性。进程是有生存期的,其动态性是由其状态转换决定的。
2、相关命令
2.1、ps命令
(1)一般格式:
ps [选项]
(2)功能介绍:
ps命令是“process status”的缩写,ps命令用于显示当前系统的进程状态。
通常,有些Linux版本中的ps命令采用三种风格的选项:UNIX风格、BSD风格和GNU风格。UNIX风格在选项字母前必须加一个“ - ”,BSD风格在选项字母前面没有“ - ”,而GNU风格在选项字符串前面需要添加两个“ - ”。
(3)常用选项:
-a | 显示系统中与tty相关的(除了会话组长)所有进程信息。 |
a | BSD风格,显示系统中与tty(当前正在使用的终端文件)相关的所有进程信息;当与选项x一起使用时,显示所有进程的信息。 |
-A | 显示所有程序 |
-e | 显示所有程序,等同于”-A”选项 |
-f | 显示进程的所有信息,即UID、PID、PPID、C、STIME、TTY、TIME、CMD |
-l | 以长格式显示进程信息 |
r | 只显示正在运行的进程 |
u | 以面向用户的格式来显示程序状况。(包括用户名、CPU及内存使用情况等信息) |
-U <用户识别码> | 列出属于该用户的程序的状况,也可使用用户名称来指定 |
U <用户名称> | 列出属于该用户的程序的状况 |
x | BSD风格,显示所有非控制终端上的进程信息;当与选项a一起使用时,显示所有进程信息。 |
--pid pidlist | 显示由进程ID(出现在参数pidlist表中)指定进程的信息。 |
-c | 新增显示CLS和PRI栏位 |
-C <指令名称> | 指定执行指令的名称,并列出该指令的进程状况 |
--tty ttylist | 显示指定终端上进程的信息,等价于-t和t |
(4)注意:
PID:进程标志号。
TTY:该进程建立时所对应的终端,“ ? "表示该进程不占用终端。
TIME:报告进程累计使用CPU时间。尽管有些命令已经运转了很长时间,但是他们真正使用CPU的时间往往很短,所以该字段的值往往是00:00:00
CMD:执行进程的命令名,是command的缩写。
UID:进程的用户ID
PPID:父进程的ID
C:进程最近使用CPU的估算
STIME:进程开始时间,以“ 小时:分 ”的形式给出。
USER:启动进程的用户
%CPU:运行该进程占用CPU的时间与该进程总的运行时间的比例
%MEM:该进程占用内存和总内存的比例
VSZ:虚拟内存的大小,以KB为单位
RSS:任务使用的不被交换物理内存的数量,以KB为单位
STAT:进程的运行状态,由下面的字符表示:
-
R(运行):进程正在运行或就绪(在运行队列中等待)。
-
S(中断):进程处于可中断睡眠状态,当某个条件形成后或者接收到信号时(等待要完成的事件),则脱离该状态。
-
D(不可中断):进程处于不可中断睡眠状态,进程不响应系统异步信号,即便用kill命令也不能将其中断。
-
T(停止):进程停止运行状态,由于作业控制信号或者被跟踪。
-
Z(僵死):进程已经终止,但进程描述符依然存在,还没有被其父进程回收, 直到父进程调用wait()系统函数后将进程释放。
若采用了BSD风格并且用户在命令中定义了STAT关键字,则会添加以下字符:
- <:高优先权的进程
- N:低优先权的进程
- L:有锁入内存的页面(用于实时任务或I/O任务)
- START:进程开始的时间或者日期,一般以“ HH:MM ”格式显示。
(5)示例:
ps (列出每个与当前shell有关的进程的基本信息,如下图所示)
ps -c (在ps显示基础上新增显示CLS和PRI栏位,如下图所示)
ps aux (显示所有终端上所有用户的有关进程的所有信息,如下图所示)
ps -f --pid 1,2,3 (显示PID为1、2、3进程的所有信息)
2.2、top命令
(1)一般格式:
top [选项]
(2)功能介绍:
top命令(性能分析工具)用于实时动态地监视进程活动及系统负载等信息,输入该命令后按回车键执行即可。
前面介绍的命令只是静态查看,而top命令可以实时刷新数据并显示,相当于Windows系统中的任务管理器。
(3)常用选项:
-d | 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s |
-q | 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行 |
-c | 切换显示模式 |
-s | 安全模式,将交谈式指令取消, 避免潜在的危机 |
-i | 不显示任何闲置 (idle) 或无用 (zombie) 的行程 |
-n | 更新的次数,完成后将会退出 top |
-b | 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内 |
(4)注意:
分析显示结果:
top命令执行结果的前5行为系统整体的统计信息,其所代表的含义如下:
-
系统时间、运行时间、登录终端数、系统负载(3个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。
-
进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
-
用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为CPU数据并以百分比格式显示,例如“99.9 id”意味着有99.9%的CPU处理器资源处于空闲。
-
物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量。
-
虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量。
PR和NI值代表的是进程的优先级,数字越低(取值范围是-20~19),优先级越高。
(5)示例:
top -n 3 (刷新3次后自动退出top命令)
2.3、pidof命令
(1)一般格式:
pidof [选项] [进程名称(命令)]
(2)功能介绍:
每个进程的进程号码值(PID)是唯一的,可以用于区分不同的进程。pidof命令用于查询某个指定服务进程的PID号码值。
(3)常用选项:
-s | 当系统中存在多个同名进程时,仅返回一个进程ID |
-c | 仅返回当前正在运行且具有同一根目录的进程PID |
-x | 返回指定运行脚本的shell进程PID |
-o | 忽略具有指定进程ID的进程 |
(4)注意:
(5)示例:
pidof sshd (查询本机上sshd服务程序的PID,如下图所示)
2.4、nice命令
(1)一般格式:
nice [选项] [进程名称(命令)]
(2)功能介绍:
nice命令用于调整进程的优先级.
(3)常用选项:
-n,--adjustment=N | 后面接一个数值,范围在-20~19.默认是10 |
(4)注意:
nice取值范围是-20~19,数值越小优先级越高。注意,只有root用户才能通过指定nice值为负整数,普通用户(具有相应的权限)指定的值只能是正整数。
(5)示例:
用户使用find命令在当前目录及其子目录中查找所有的C程序源文件,可能要花费较长的时间。为了能同时处理其他工作,可以降低find命令的优先级,让它在后台运行(在末尾添加一个&符号,这样命令将进入系统后台来执行)。
nice -n 15 find . -name *.c -print&
2.5、kill命令
(1)一般格式:
kill [选项] [PID或信号]
(2)功能介绍:
kill命令用于终止指定PID的服务进程或进程组。
Ctrl+c可以终止一个前台进程,但是后台进程必须使用kill命令来终结。
kill命令可将指定的信号发送给相应的进程或进程组。 kill命令默认发送编号为15的TERM信号,TERM信号将终止所有不能捕获该信号的进程。那些能捕获该信号的进程或进程组,要用编号为9的kill信号,强制杀死进程或进程组。
(3)常用选项:
-s,--signal signal | 指定需要发送的信号signal,该信号可以是信号名(如KILL),也可以是对应信号的号码(如9)。 |
-p,--pid | 指定kill命令只显示相关进程的进程号,而不发送任何信号 |
-l,--list [number] | 列出系统支持的信号名称 |
-a | 处理当前进程时不限制命令名和进程号的对应关系 |
(4)注意:
普通用户只能使用不带信号参数的kill命令或者至多使用信号9.
只有进程的主人才能向这些进程发出kill信号。若在没有权限情况下使用kill命令或者kill一个不存在的命令时,会得到一个错误信号。
可以向多个进程发信号或终止他们。
当kill命令成功的发送了信号,shell会在屏幕上显示进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell命令提示符再次出现时,才会显示出来。
强制终止进程,这常会带来一些副作用,如数据丢失或终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才会使用KILL信号(9),因为进程不能首先捕获他。
(5)示例:
kill -l (显示信号名称列表,如下图所示)
kil -s 2 123 (等效于在前台运行PID为123的进程时按下Ctrl+c键)
kill 0 (撤销所有的后台作业)
kill 145 (结束PID为145的进程)
2.6、killall命令
(1)一般格式:
kill [选项] [服务名称]
(2)功能介绍:
killall命令用于终止某个指定名称的服务所对应的全部进程。
通常来讲,复杂软件的服务程序会有多个进程协同为用户提供服务,如果用kill命令逐个去结束这些进程会比较麻烦,此时可以使用killall命令来批量结束某个服务程序带有的全部进程。
(3)常用选项:
-e | 对长名称进行精确匹配 |
-l | 打印所有已知信号列表 |
-p | 杀死进程所属的进程组 |
-i | 交互式杀死进程,杀死进程前需要进行确认 |
-r | 使用正规表达式匹配要杀死的进程名称 |
-s | 用指定的进程号代替默认信号“SIGTERM” |
-u | 杀死指定用户的进程 |
(4)注意:
(5)示例:
killall httpd (杀死httpd所有进程)
2.7、sleep命令
(1)一般格式:
sleep [选项]
(2)功能介绍:
sleep可以使当前进程暂停执行一段时间。此命令大多用于shell程序设计中,使两条命令执行之间停顿指定的时间。
(3)常用选项:
--help | 显示辅助讯息 |
--version | 显示版本编号 |
时间值 | 时间长度,默认情况下,“时间值”参数以秒为单位,后面可接 s:秒、m:分、h:小时 、d:日数 |
(4)注意:
(5)示例:
sleep 5m (休眠5分钟)
date "+%H:%M:%S" ; sleep 1m ; date "+%H:%M:%S" (显示目前时间后,延迟 1 分钟,再次显示时间)
sleep 30;who | grep 'mengqc' (使进程先暂停100秒,然后查看用户mengqc是否在系统中)
2.8、pstree命令
(1)一般格式:
pstree [选项]
(2)功能介绍:
pstree命令用于以树状图的形式展示进程之间的关系,英文全称为“process tree”,输入该命令后按回车键执行即可。
(3)常用选项:
-a | 显示每个程序的完整指令,包含路径,参数或是常驻服务的标示 |
-c | 不使用精简标示法 |
-G | 使用VT100终端机的列绘图字符 |
-h | 列出树状图时,特别标明现在执行的程序 |
(4)注意:
(5)示例:
pstree