目录
1 ps命令
1.1 简介
ps 命令是 Linux 和其他类 Unix 系统中用于查看当前运行的进程的强大工具。ps 代表 “process status”。
ps 用于显示当前活动进程信息的命令行工具。如果想要周期性更新所选进程及其显示的信息时,可以使用 top 命令代替。
这个版本的 ps 命令接受几种不同类型的选项:
- 1.UNIX 选项:这些选项可以分组,并且必须以前缀短横线 - 开头。
- 2.BSD 选项:这些选项也可以分组,但不需要使用短横线 -。
- 3.GNU 长选项:这些选项以两个短横线 – 开头。
不同类型的选项可以自由混合使用,但可能会出现冲突。由于 ps 命令需要与许多标准和实现兼容,因此存在一些功能相同但名称不同的同义词选项。
请注意,ps -aux 和 ps aux 是不同的。POSIX 和 UNIX 标准要求 ps -aux 显示名为 x 的用户拥有的所有进程,以及由 -a 选项选择的所有进程。如果名为 x 的用户不存在,这个 ps 版本可能会将其解释为 ps aux 并发出警告。这种行为旨在帮助过渡旧脚本和习惯,但它很脆弱,可能会发生变化,因此不应依赖它。
默认情况下,ps 选择与当前用户具有相同有效用户 ID(euid=EUID)并且与调用者关联到同一终端的所有进程。它显示进程 ID(pid=PID)、与进程关联的终端(tname=TTY)、以 [DD-]hh:mm:ss 格式表示的累计 CPU 时间(time=TIME),以及可执行文件名(ucmd=CMD)。默认情况下,输出不排序。
ps命令通过读取/proc目录中的虚拟文件来工作
1.2 说明
使用:ps [options]
1、选项:
- a:显示所有终端的进程,包括其他用户的进程
- -A:选择所有进程,同-e选项
- -a:选择所有进程,除了会话领导者(参见 getsid(2))以及未与终端关联的进程。
- -d:选择所有进程,除了会话领导者
- –deselect:选择所有进程,除了那些满足指定条件的进程(否定选择)。与 -N 相同。
- -e:选择所有进程,同 -A
- -N:选择所有进程,除了那些满足指定条件的进程(否定选择)。与 --deselect 相同
- T:选择与此终端关联的所有进程
- r:只选择正在运行的进程
- x:显示没有控制终端的进程
- -C:等同于 C,根据命令名筛选进程
- -G grplist:根据真实组ID(RGID)或名称选择。
- -g grplist:根据会话或通过有效组名选择。组ID号仅在同时指定了一些组名时才会起作用。
- –Group grplist:根据真实组ID(RGID)或名称选择。与-G相同。
- –group grplist:根据有效组ID(EGID)或名称选择。-g选项通常是–group的替代选项。
- p pidlist:按进程ID选择。与-p和–pid相同。
- -p pidlist:按PID选择。这会选择进程ID号出现在pidlist中的进程。与p和–pid相同。
- –pid pidlist:按进程ID选择。与-p和p相同。
- –ppid pidlist:按父进程ID选择。
- –quick-pid pidlist:按进程ID选择,同 -q 和 q
- -s sesslist:按会话id选择,同 --sid
- t ttylist:按终端选择,同 -t 和 --t
- U userlist:按有效用户名称或用户ID(EUID)选择,同 -u,–user
- -U userlist:按真实用户ID(RID)或者名称选择。同 -U, --User
2、输出格式控制:
- -c:同-l,显示不同调度器的信息
- –context:显示安全上下文格式(用于SELinux)
- -f:打印完整格式列表
- -F:额外完整格式
- –format format:用户自定义,同 -o , o
- j:BSD作业控制格式
- -j:作业格式
- l:显示BSD长格式
- -l:长格式
- -M:添加一列安全数据,同Z
- o format:指定用户自定义格式。与-o和–format相同。
- O format:该选项预加载了o(重载)。BSD的O选项可以像-O一样工作(用户自定义输出格式,其中一些常用字段已预定义),或者可以用来指定排序顺序。程序会采用启发式方法来确定这个选项的行为。为了确保获得期望的行为(排序或格式化),请以其他方式指定该选项(例如,使用-O或–sort)。当用作格式化选项时,它与-O相同,具有BSD的特性。
- -O format:类似于-o,但预加载了一些默认列。与-o pid,format,state,tname,time,command或-o pid,format,tname,time,cmd相同
- s:显示信号格式
- u:显示面向用户的格式
- v:显示虚拟内存格式
- -y:不显示标志,只能与 -l 选项同时使用
- 进程标志:
- 1 表示进程已经fork(创建子进程)但尚未执行exec(加载新程序)。
- 4 表示进程使用了超级用户权限。
- 进程标志:
3、输出修饰符:
- c :显示真实的命令名
- –cumulative:包含一些已终止子进程的数据(作为父进程的总和)。
- -e:在命令之后显示环境变量
- -f:以ASCII艺术形式显示进程层次结构(树状图)
- -h:不显示标题
- -H:显示进程层次结构(树状图)。
- –headers:重复标题行,每页输出一个标题。
- k spec:指定排序顺序。排序语法是 [+|-]key[,[+|-]key[,…]]。从“标准格式说明符”部分中选择一个多字母的键。加号(+)是可选的,因为默认方向是递增的数值或字典顺序。这与 --sort 相同。
- –no-headers:所有标题行都不显示
4、显示线程:
- H 将线程视为进程进行显示
- -L 显示线程,可能包含LWP(轻量级进程)和NLWP列。
- m 在进程之后显示线程。
- -m 在进程之后显示线程。
- -T 显示线程,可能包含SPID列(线程ID)。
5、进程状态码:
- T 表示进程被作业控制信号停止。
- t 表示进程在跟踪过程中被调试器停止。
- W 表示分页(从2.6.xx内核开始不再有效)。
- X 表示进程已死(不应该看到)。
- Z 表示已终止但未被其父进程回收的僵尸进程。
- 对于BSD格式以及使用stat关键字时,可能会显示额外的字符:
- < 表示高优先级(对其他用户不友好)。
- N 表示低优先级(对其他用户友好)。
- L 表示有页面被锁定在内存中(用于实时和自定义IO)。
- s 表示是会话领导者。
- l 表示是多线程的(使用CLONE_THREAD,如NPTL pthreads那样)
6、AIX 格式描述符
AIX 格式描述符:ps命令支持AIX格式描述符。例如,可以使用以下命令生成正常的默认输出:ps -eo “%p %y %x %c”
- %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
7、标准格式指定符
标准格式指定符:可以用来控制输出格式(例如,通过选项-o)或按照GNU风格的–sort选项对所选进程进行排序的不同关键字。也可以理解为输出的标题行。例如:ps -eo pid,user,args --sort user。
- %cpu %CPU:进程使用的CPU时间除以进程运行的时间(CPU时间/实际时间比率),以百分比表示。除非恰巧所有进程都正好使用了它们的CPU时间,否则它们的总和将不会达到100%。(别名pcpu)。
- CPU利用率则反映了进程在CPU上执行的时间占比,是评估进程性能的重要指标之一。
- %mem %MEM:表示进程的驻留集大小(RSS)与机器上物理内存的比率,以百分比表示。(别名pmem)
- 这里的驻留集大小(Resident Set Size,RSS)是指进程当前在物理内存中占用的空间大小,不包括交换出去的部分。这个指标可以用来评估进程对物理内存的占用情况
- args COMMAND:显示的是进程及其所有参数组成的字符串。这个字符串可能包含对参数的修改。这一列的输出中可能包含空格。被标记为的进程是部分死亡的,正在等待其父进程来完全销毁它
- bsdstart START:命令开始执行的时间。如果进程在24小时内启动,输出格式为“HH:MM”,否则格式为“Mmm:SS”(其中Mmm为月份的三个字母缩写)
- start_time START:进程开始的时间或日期
- stime STIME:stime别名start_time,参考上面即可
- bsdtime TIME:累积的CPU时间,包括用户时间和系统时间。显示格式通常为“MMM:SS”,但如果进程使用的CPU时间超过999分钟,则显示会向右偏移。
- c C:处理器利用率。目前,这是进程在其生命周期内的使用百分比的整数值。(与%cpu类似,但显示格式和计算方式可能有所不同)
- comm COMMAND:命令名(command name)列仅显示可执行文件的名称。对命令名所做的修改不会在这一列中显示。
- euid EUID:有效用户id,别名 uid
- euser EUSER:有效用户名
- exe EXE:执行程序的路径。
- f F:进程tag
- ni NI / nice NI: 进程的动态优先级,也称为“nice值”的调整。与 PRI 相同,NI 值越低,进程的优先级越高。不过,NI 是一个相对值,它是基于系统默认优先级(通常是 0)的调整。例如,如果一个进程的 NI 值是 5,那么它比默认优先级的进程获得更少的 CPU 时间。可以通过 renice 命令来调整进程的 NI 值
- nwchan WCHAN:内核函数地址列显示的是进程正在休眠的内核函数的地址
- pid PID:进程ID
- pgid PGID:进程组ID
- ppid PPID:父进程ID
- pri PRI:进程的静态优先级,也称为“nice值”。这个值决定了进程在系统中的重要性,影响着操作系统分配给进程的 CPU 时间量。PRI 的值越低,表示进程的优先级越高,它将获得更多的 CPU 时间。通常,PRI 值的范围是从 -20(最高优先级)到 19(最低优先级),其中 0 是默认值。
- rgid RGID:真实组ID
- rgroup RGROUP:真实组名
- rss RSS:RSS(Resident Set Size,常驻内存集)是Linux中用来表示进程实际使用的物理内存大小的一个指标,单位是千字节(KB)。它包括了进程代码、数据、堆栈以及共享库等所有实际加载到RAM中的内存内容。
- ruid RUID:真实用户ID
- ruser RUSER:真实用户名
- sess SESS:session ID,同SID
- tpgid TPGID:进程所连接的终端(tty)上的前台进程组的ID,或者如果进程没有连接到tty,则为-1。
- s S:进程状态,以下是常见的状态
- R (Running or Runnable): 进程正在运行或在运行队列中等待运行。这并不意味着进程一定在执行代码,它也可能在等待某些资源变得可用。
- S (Sleeping): 进程处于休眠状态,等待某个条件或事件满足。这是一个可中断的睡眠状态,当等待的事件发生时,进程可以被唤醒。
- D (Disk Sleep): 进程处于不可中断的磁盘睡眠状态,通常是因为它正在进行I/O操作,如读写磁盘。在这种状态下,进程不能被其他信号或中断唤醒。
- T (Stopped): 进程已被停止。这通常是因为它收到了如SIGSTOP这样的信号。
- Z (Zombie): 进程已终止,但其父进程尚未读取其退出状态。这样的进程被称为僵尸进程,它不再执行任何代码,但其在进程表中的条目仍然存在。
- stat STAT:进程状态
- tname TTY:控制终端
- vsz VSZ:进程使用的虚拟内存(默认是KB)
- sz SZ:进程的核心镜像在物理内存也的大小,包括文本、数据和栈空间
- psr PSR:进程当前所属的处理器
- wchan WCHAN:进程正在睡眠的内核函数名称,如果是正在运行的进程则显示为“-”,或者如果进程是多线程的且 ps 命令没有显示线程信息,则显示为“*”
- pending PENDING:待处理信号的掩码
- blocked BLOCKED:阻塞信号的掩码
- ignored IGNORED:忽略信号的掩码
- caught CAUGHT:捕获信号的掩码
- lwp LWP:轻量级进程(线程)ID
- nlwp NLWP:进程中的轻量级进程(线程)数量。
- label LABEL:安全标签,通常用于SELinux上下文数据
1.3 实例
1、默认输出
root@con02:~# ps
PID TTY TIME CMD
7352 pts/3 00:00:00 sudo
7353 pts/3 00:00:00 bash
8866 pts/3 00:00:00 tail
22376 pts/3 00:00:00 ps
## 输出所有用户的进程
root@con02:~# ps a
PID TTY STAT TIME COMMAND
944 tty1 Ss+ 0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
7312 pts/2 Ss 0:00 -bash
7351 pts/2 S+ 0:00 sudo -i
7352 pts/3 Ss 0:00 sudo -i
7353 pts/3 S 0:00 -bash
8866 pts/3 T 0:00 tail -fn99 /var/log/syslog
22377 pts/3 R+ 0:00 ps a
###### 参数解释:
PID:进程ID
TTY:使用终端
STAT:进程状态
TIME:进程实际使用CPU的时间
COMMAND:启动进程的命令行
2、使用标准语法查看系统上的每个进程
ps -e
#####
PID TTY TIME CMD
1 ? 00:00:29 systemd
ps -ef
######
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Mar19 ? 00:00:29 /sbin/init
### 参数解释
UID:用户ID
PID:进程ID
PPID:父进程ID
C:处理器利用率,与%CPU类似
STIME:进程开始时间
TTY:终端
TIME:进程实际使用CPU的时间
CMD:启动进程的命令名称或命令行
ps -eF
#######
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 1 0 0 41960 10644 0 Mar19 ? 00:00:29 /sbin/init
root 2 0 0 0 0 0 Mar19 ? 00:00:00 [kthreadd]
#### 参数解释:
SZ:进程的核心镜像在物理内存页的大小
RSS:进程实际使用的物理内存大小
PSR:进程当前所属的处理器
ps -ely
#######
S UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMD
S 0 1 0 0 80 0 10644 41960 ep_pol ? 00:00:29 systemd
S 0 2 0 0 80 0 0 0 kthrea ? 00:00:00 kthreadd
I 0 3 2 0 60 -20 0 0 rescue ? 00:00:00 rcu_gp
##### 参数解释
S:进程状态
PRI:进程静态优先级,是进程的初始优先级,通常在创建进程时设置
NI:进程动态优先级,是进程当前的优先级调整值,它是基于 PRI 的相对值
SZ:进程的核心镜像在物理内存页的大小
WCHAN:进程正在睡眠的内核函数名称,如果是正在运行的进程则显示为“-”,或者如果进程是多线程的且 ps 命令没有显示线程信息,则显示为“*”
3、使用BSD语法查看系统上的每个进程
ps ax
#######
PID TTY STAT TIME COMMAND
1 ? Ss 0:29 /sbin/init
2 ? S 0:00 [kthreadd]
ps axu
#####
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 167840 10644 ? Ss Mar19 0:29 /sbin/init
####参数解释:
VSZ:进程使用的虚拟内存
RSS:进程实际使用的物理内存大小
START:进程开始的时间或日期
4、输出进程树
ps -ejH
######
PID PGID SID TTY TIME CMD
2 0 0 ? 00:00:00 kthreadd
3 0 0 ? 00:00:00 rcu_gp
4 0 0 ? 00:00:00 rcu_par_gp
ps axjf
#######
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 2 0 0 ? -1 S 0 0:00 [kthreadd]
2 3 0 0 ? -1 I< 0 0:00 \_ [rcu_gp]
2 4 0 0 ? -1 I< 0 0:00 \_ [rcu_par_gp]
###参数解释
PGID:进程组ID
SID:session ID
TPGID:进程所连接的终端(tty)上的前台进程组的ID
5、获取线程信息
ps -eLf
######
UID PID PPID LWP C NLWP STIME TTY TIME CMD
root 1 0 1 0 1 Mar19 ? 00:00:29 /sbin/init
root 2 0 2 0 1 Mar19 ? 00:00:00 [kthreadd]
## 参数解释
LWP:轻量级进程(线程)ID
NLWP:进程中的轻量级进程(线程)数量
ps axms
#######
UID PID PENDING BLOCKED IGNORED CAUGHT STAT TTY TIME COMMAND
0 1 0000000000000000 - - - - ? 0:29 /sbin/init
## 参数解释
PENDING:待处理信号的掩码
BLOCKED:阻塞信号的掩码
IGNORED:忽略信号的掩码
CAUGHT:捕获信号的掩码
7、获取安全信息
ps -eo euser,ruser,suser,fuser,f,comm,label
######
EUSER RUSER SUSER FUSER F COMMAND LABEL
root root root root 4 systemd unconfined
root root root root 1 kthreadd unconfined
ps axZ
########
LABEL PID TTY STAT TIME COMMAND
unconfined 1 ? Ss 0:29 /sbin/init
unconfined 2 ? S 0:00 [kthreadd]
unconfined 3 ? I< 0:00 [rcu_gp]
## 参数解释:
LABEL:安全标签,通常用于SELinux上下文数据
ps -eM
######
LABEL PID TTY TIME CMD
unconfined 1 ? 00:00:29 systemd
unconfined 2 ? 00:00:00 kthreadd
8、以root(真实有效的ID)身份查看每个进程运行
ps -U root -u root u
#######
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 167840 10644 ? Ss Mar19 0:29 /sbin/init
root 2 0.0 0.0 0 0 ? S Mar19 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Mar19 0:00 [rcu_gp]
9、以定义的格式查看每个进程
即可以只查看自己想要的字段
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps -Ao pid,tt,user,fname,tmout,f,wchan
10、只打印syslogd的进程id
ps -C syslogd -o pid=
11、只打印PID为10的命令名称
ps -q 10 -o comm=
mm_percpu_wq
总结
ps的用法灵活,最常用的参数组合如下,也可以根据实际情况自己组合
ps -ef
ps aux