Linux命令:ps命令

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

猜你喜欢

转载自blog.csdn.net/dl_11/article/details/136909827