ps命令使用

显示进程信息,参数可省略:

aux  BSD 风格显示进程 常用
-efH  System V 风格显示进程
-e , -A 显示所有进程
a 显示终端上所有用户的进程
x 显示无终端进程
u 显示详细信息
f 树状显示
w 完整显示信息
l 显示长列表
-o <format>   //--format <format>

列属性:

USER 进程的属主;
PID   进程的ID;
PPID    父进程;
%CPU   进程占用的CPU百分比;
%MEM  占用内存的百分比;
NI        进程的NICE值,数值大,表示较少占用CPU时间;
VSZ     該进程使用的虚拟內存量(KB);
RSS     該進程占用的固定內存量(KB)(驻留中页的数量);
TTY     該進程在那個終端上運行(登陸者的終端位置),若與終端無關,則顯示(?)。若為pts/0等,則表示由網絡連接主機進程
WCHAN  當前進程是否正在進行,若為-表示正在進行;
START   該進程被觸發启动时间;
TIME      該进程實際使用CPU運行的时间;
COMMAND   命令的名称和参数;

PGID:进程组 ID(Process Group ID)
SID:会话 ID(Session ID)
TPGID:控制终端的进程组 ID(Terminal Process Group ID)。
STAT:进程状态(Process State)。
UID:用户 ID(User ID)。

ps工具标识进程的5种状态码(STAT):

D 无法中断的休眠状态(通常 IO 的进程)uninterruptible sleep (usually IO)
R 进程当前正在执行或在运行队列中等待执行
    runnable (on run queue)
S 处于休眠状态, sleeping
T 停止或被追踪, traced or stopped
    可能是由于收到了 SIGSTOP、SIGTSTP、SIGTTIN 或 SIGTTOU 信号
W 进入内存交换  (从内核2.6开始无效)
X 死掉的进程   (基本很少見)
Z 僵尸进程, a defunct (”zombie”) process
    僵尸(Zombie)- 进程已经终止,但其父进程尚未调用 wait() 或 waitpid() 来获取其终止状态。
    僵尸进程的进程描述符仍然存在于系统中。

< 优先级高的进程
N 优先级较低的进程

L 有些页被锁进内存;
    进程的内存页被锁定在 RAM 中,不允许被换出
s 进程的领导者(在它之下有子进程)
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
+ 位于后台的进程组

示例

常用命令

ps axjf:

# 查看父进程
$ ps axjf
   PPID     PID    PGID     SID TTY        TPGID STAT   UID   TIME COMMAND
      0  289233  289233  289233 pts/5     289256 Ss       0   0:00 bash
 289233  289256  289256  289233 pts/5     289256 R+       0   0:00  \_ ps axjf
      0  289174  289174  289174 pts/4     289187 Ss       0   0:00 bash
 289174  289187  289187  289174 pts/4     289187 S+       0   0:00  \_ vim output.log

ps aux:

$ ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         145  0.0  0.0   4632  3940 pts/0    Ss    2024   0:00 bash
root         159  0.0  0.0   4956  4224 pts/0    S+    2024   0:12 watch -n 1 nvidia-smi
root       24380  0.0  0.0   4632  4004 pts/2    Ss    2024   0:00 bash
root       24394  0.0  0.0   3756  3064 pts/2    S+    2024   1:17 watch -n 1 nvidia-smi

ps alx:

$ ps alx
F   UID     PID    PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0     145       0  20   0   4632  3940 -      Ss   pts/0      0:00 bash
0     0     159     145  20   0   4956  4224 -      S+   pts/0      0:12 watch -n 1 nvidia-smi
4     0   15877       0  20   0   4632  4020 -      Ss   pts/1      0:00 bash
0     0   19933   15877  20   0   7336  3292 -      S+   pts/1      0:00 top
4     0   24380       0  20   0   4632  4004 -      Ss   pts/2      0:00 bash

ps -ef:

# 显示所有进程信息,连同命令行(显示父pid->ppid)
$ ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0  2024 ?        00:34:42 python3 -m vllm.entrypoints.openai.api_server --model /root/models/Qwen2.5-32B-Instruct
root         145       0  0  2024 pts/0    00:00:00 bash
root         159     145  0  2024 pts/0    00:00:12 watch -n 1 nvidia-smi
root       15877       0  0  2024 pts/1    00:00:00 bash
root       19933   15877  0  2024 pts/1    00:00:00 top

ps –eLf:

$ ps -eLF
UID          PID    PPID     LWP  C NLWP    SZ   RSS PSR STIME TTY          TIME CMD
root           1       0       1  0   48 1686693 832260 8 2024 ?        00:33:38 python3 -m vllm.entrypoints.openai.api_server --model /root/models/Qwen2.5-32B-Instruct
root           1       0       7  0   48 1686693 832260 4 2024 ?        00:00:00 python3 -m vllm.entrypoints.openai.api_server --model /root/models/Qwen2.5-32B-Instruct
root           1       0       8  0   48 1686693 832260 6 2024 ?        00:00:00 python3 -m vllm.entrypoints.openai.api_server --model /root/models/Qwen2.5-32B-Instruct
root         145       0     145  0    1  1158  3940   5  2024 pts/0    00:00:00 bash
root         159     145     159  0    1  1239  4224  10  2024 pts/0    00:00:12 watch -n 1 nvidia-smi

ps -eF:

$ ps -eF
UID          PID    PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root           1       0  0 1686693 832260 6 2024 ?        00:34:42 python3 -m vllm.entrypoints.openai.api_server --model /root/models/Qwen2.5-32B-Instruct
root         145       0  0  1158  3940   5  2024 pts/0    00:00:00 bash
root         159     145  0  1239  4224  10  2024 pts/0    00:00:12 watch -n 1 nvidia-smi
root       15877       0  0  1158  4020   0  2024 pts/1    00:00:00 bash

ps -ely:

ps -ely
S   UID     PID    PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S     0      35       1  0  80   0 11332  4075 -      ?        00:00:00 python3
S     0     145       0  0  80   0  3940  1158 -      pts/0    00:00:00 bash
S     0     159     145  0  80   0  4224  1239 -      pts/0    00:00:12 watch
S     0   15877       0  0  80   0  4020  1158 -      pts/1    00:00:00 bash

一些常用示例

To see every process on the system using BSD syntax:

ps ax
ps axu

To print a process tree:

ps -ejH
ps axjf

To get info about threads:

ps -eLf  // 常用
ps axms

To get security info:

ps -eo euser,ruser,suser,fuser,f,comm,label
ps axZ
ps -eM

To see every process running as root (real & effective ID) in user format:

ps -U root -u root u

用户自定义模式看进程:

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 -eopid,tt,user,fname,tmout,f,wchan

只打印syslogd的进程id:

ps -C syslogd -o pid=

只打印PID为42的进程名:

ps -p 42 -o comm=

实例-输出指定列

ps -o rss
ps -o vsz

展示格式:

rss        RSS
resident set size, the non-swapped physical memory that a task has used (in kiloBytes).
(alias rssize, rsz).
实际驻留"在内存中"的内存数. 不包括已经交换出去的代码. 举一个例子:
如果你有一个程序使用了100K内存, 操作系统交换出40K内存, 那么RSS为60K.
RSS还包括了与其它进程共享的内存区域. 这些区域通常用于libc库等

vsz        VSZ
virtual memory size of the process in KiB (1024-byte units).
Device mappings are currently excluded; this is subject to change. (alias vsize).

size       SZ
approximate amount of swap space that would be required if the process were
  to dirty all writable pages and then be swapped out. This number is very rough!
进程使用的地址空间, 如果进程映射了100M的内存, 进程的地址空间将报告为100M内存.
事实上, 这个大小不是一个程序实际使用的内存数

sz         SZ
size in physical pages of the core image of the process.
This includes text, data, and stack space.
Device mappings are currently excluded; this is subject to change. See vsz and rss.
(Private RSS): 映射到内存中的页面, 这些页面仅由进程单独使用.
这也是我们最关心地方: 进程实际占用的内存数