Linux ps命令使用详解

ps命令常见使用方法有两种,另外我们可以通过一写参数对ps结果进行筛选和过滤。分别是:

1
2
ps -ef
ps aux

那这两个命令有什么区别呢?下面将对这两个命令进行详细说明和解释。

ps -ef

返回信息的格式:

1
2
3
4
5
6
7
8
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 9月24 ? 00:00:25 /sbin/init
root 2 0 0 9月24 ? 00:00:00 [kthreadd]
root 3 2 0 9月24 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 9月24 ? 00:00:00 [kworker/0:0H]
root 7 2 0 9月24 ? 00:09:13 [rcu_sched]
root 8 2 0 9月24 ? 00:00:00 [rcu_bh]
...

对以上各列信息进行解释:

  • uid : 用户id
  • pid : 当前进程的id
  • ppid : 当前进程的父进程id
  • C : 进程占用CPU的百分比
  • STIME : 进程启动时间
  • CMD : 进程启动命令

上述返回值比较容易理解,不一一解释

ps aux

返回信息的格式:

1
2
3
4
5
6
7
8
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 120060 5392 ? Ss 9月24 0:25 /sbin/init
root 2 0.0 0.0 0 0 ? S 9月24 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 9月24 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 9月24 0:00 [kworker/0:0H]
root 7 0.1 0.0 0 0 ? S 9月24 9:14 [rcu_sched]
root 8 0.0 0.0 0 0 ? S 9月24 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 9月24 0:00 [migration/0]

对以上信息解释:

  • user : 用户名
  • pid : 进程id
  • %CPU : 进程运行占用CPU的百分比
  • %MEM : 进程占用内存的百分比
  • VSZ : 该进程使用的虚拟内存量,表示一个程序完全驻留在内存中占用的虚拟内存量
  • RSS : 该进程占用的固定内存量
  • TTY : 终端名
  • START : 进程开启时间
  • STAT : 进程的状态
  • TIME : 该进程实际使用的CPU时间
  • COMMAND : 进程运行指令

上述比较重要的信息主要包括VSZ,RSS以及STAT。
VSZ表示一个程序完全驻留在内存中占用的内存量,其包括程序链接的动态链接库的大小,栈的大小以及代码段的大小。(手动算过,但是栈的大小很迷,貌似数组在栈中的大小与同类型变量的大小相同,待验证)。
RSS包括运行过程中实际被加载到内存中的动态链接库,可执行文件以及栈的大小。
STAT为当前进程的运行状态。其包括多种状态,具体解释如下所述:

  • D : 不可中断(通常是IO进程)
  • R : 正在运行或者在队列中的进程
  • S : 处在休眠状态的进程
  • T : 停止或者被追踪
  • Z : 僵尸进程
  • W : 进入内存交换
  • X : 死掉的进程
  • < : 优先级较高的进程
  • n : 优先级较低的进程
  • s : 包含子进程
  • + : 位于后台进程组

可以在上述命令的基础上对查询结果进行筛选,如我们想要对内存占用量进行排序,方法如下:

1
ps aux --sort -pMEM