概述
系统要处理特定的任务需要运行特定的程序,而程序只是系统中的一个静态的文件,当运行某个程序时,实际上是运行运行这个程序的副本,创建了一个进程,进程的运行是一个动态的过程。要使系统健康的运行,就必须了解系统中各项程序的运行状况,并对异常运行的进程进行处理,保持系统的可用性。这里主要介绍ps、pstree命令,来完成进程的查看工作,后续会介绍top、vmstat、dstat以及kill命令完成对进程的管理。
ps
process state,显示当前时刻系统进程的快照。系统各进程的相关数据都保存在/proc/PID目录下的各文件中。
选项有三种风格:
1 UNIX options, which may be grouped and must be preceded by a dash.
2 BSD options, which may be grouped and must not be used with a dash.
3 GNU long options, which are preceded by two dashes.
Unix风格:必须使用-
BSD风格:不能使用-
GNU风格:使用--
启动进程的方式:
系统启动过程中自启动:与终端无关的进程;
用户通过终端启动:与终端相关的进程;
选项:
a:所有与终端相关的进程;
x:所有与终端无关的进程;
u:以用户为中心组织进程状态信息显示;
f: 选项显示进程树,相当于 --forest
k|--sort 属性 对属性排序,属性前加 - 表示倒序
o: 属性...定制显示的属性,pid、cmd、%cpu、%men
L: 显示支持的属性列表
常见选项:
-C cmdlist 指定命令,多个命令用,分隔;查看脚本时若脚本用bash运行或者没有写#!/bin/bash
则不会显示
-L 显示线程
-e: 显示所有进程,相当于-A
-f: 显示完整格式程序信息
-F: 显示更完整格式的进程信息
-H: 以进程层级格式显示进程相关信息
-u userlist 指定有效的用户ID或名称
-U userlist 指定真正的用户ID或名称
-g gid或groupname 指定有效的gid或组名称
-G gid或groupname 指定真正的gid或组名称
-p pid 显示指pid的进程
--ppid pid 显示属于pid的子进程
-M 显示SELinux信息,相当于Z
常用组合之一:ps aux
例如:
]# ps a:显示所有与终端相关的进程;
]# ps x:显示所有与终端无关的进程;
]# ps aux
显示字段表示含义:
USER:启动进程的用户;
PID:进程号;默认以PID排序;
%CPU:累计占用cpu的比率;
%MEM:内存空间占用比率;
VSZ:占用虚拟内存集的大小;
虚拟内存空间中数据的空间叫页面page,每个页面都映射到物理内存中的可用页框page frame,且是不连续的;操作系统中可有共享库,多个进程可使用共享库,在内存中只存一份即可;
比如进程1虚拟内存空间中有5个页面,其中2个是使用的共享库的数据;
进程2虚拟内存空间中有4个页面,其中2个是使用共享库的数据;
那么,事实上,它们真正占用的空间是不包括共享库的,进程1占用为3个内存页框,进程2占用为2个内存页框;
RSS:Resident Size常驻内存集;
内存空间分两类:物理内存和交换内存,当物理内存不够用是,可把一些数据放在交换内存上,但有些数据是不能放在交换内存中的就叫常驻内存集;
TTY:?表示不知道终端是什么;如果知道就显示终端名称;
STAT:当前进程的状态;(BSD风格)
R:running,运行态;
S:interruptable sleeping,可中断睡眠;
D:uninterruptable sleeping,不可中断睡眠;
T:Stopped,停止态;
Z:zombie,僵死态;
+:前台进程,运行在终端上,占用命令行;
l:多线程进程;
N:低优先级进程;
<:高优先级进程;
s:session leader,会话进程首进程(会话(子进程)发起者);
START:启动时间;
TIME:cpu累计运行时间;
COMMAND:有中括号的表示内核线程;
-e:显示所有进程;
-f:显示完整信息;
例如:
]# ps -e:可显示字段为PID、TTY、TIME、CMD;
]# ps -ef:可显示字段为UID、PID、PPID、C、STIME、TTY、TIME、CMD;
PPID为父进程的进程号;
C:cpu占用百分比,cpu utilization;
STIME:启动时间;
TTY:与终端相关;
TIME:累计运行时间;
CMD:启动进程的命令;
常用组合之二:ps -ef
-F:显示完成格式的进程信息;
例如:
]# ps -eF:可显示字段有:UID、PID、PPID、C、SZ、RSS、PSR、ST、STIME、TTY、TIME、CMD
PSR:进程运行在哪颗cpu上;
-H:以层级结构显示进程的相关信息(显示进程及子进程);
例如:
]# ps -eFH:查看所有进程,完成格式,以层级结构显示;
常用组合之三:ps -eFH
-o field1,field2,...:自定义要显示的字段列表,以逗号分隔;
常用的field:pid,ni,pri,psr,pcpu,stat,comm,tty,ppid,rtprio
ni:ncie值;-20到19
priority:priority,优先级;
rtprio:实时优先级;
psr:进程运行在哪颗cpu上;
pcpu:cpu的利用率;
ppid:父进程的进程号;
常用组合之四:o一定要写在后面,因为后面要带参数;
ps -eo
ps axo
例如:
]# ps axo pid,comm:查看pid,comm两字段,所有与终端相关,与终端无关的进程;
ps格式的显示:
CODE NORMAL HEADER
%C pcpu %CPU
%G group GROUP
%P ppid PPID
%U user USER
%a args COMMAND
%c comm COMMAND
%g rgroup RGROUP
%n nice NI
%p pid PID
%r pgid PGID
%t etime ELAPSED
%u ruser RUSER
%x time TIME
%y tty TTY
%z vsz VSZ
pstree
pstree以树状图的形式展现进程以及进程间的关系,是查看所有进程比较直观的方法。
pstree命令:
display a tree of processes
选项:
-a 显示进程的详细信息,包括路径、参数等
-l 采用长列格式显示树状图;
-n 用程序识别码排序。预设是以程序名称来排序;
-p 显示程序识别码;
-u 显示用户名称
-p 显示进程号pstree 命令的各选项也是可以组合运用的。
pstree
pstree -a
pstree -npl