前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LinuxShell命令ps

LinuxShell命令ps

作者头像
hotarugali
发布2022-02-28 20:15:38
发布2022-02-28 20:15:38
80500
代码可运行
举报
运行总次数:0
代码可运行

【注】具体详解参见 man 手册。

1. 简介

ps 是 Linux 下显示瞬间进程状态的强大命令,并不动态连续显示进程状态(top 命令则是对进程进行实时监控)。

2. 格式

代码语言:javascript
代码运行次数:0
运行
复制
ps [options]

Linux 系统中使用 ps 命令支持三种不同类型的命令行选项参数:

  • Unix 风格参数(参数前使用单破折线)
  • BSD 风格参数(参数前不使用破折线)
  • GNU 风格长参数(参数前加双破折线)

3. 选项

  • 默认情况下(不提供选项参数:ps),只显示运行在当前控制台下属于当前用户的进程。
  • 在使用 BSD 参数时,ps 命令会自动改变输出以模仿 BSD 格式。

3.1 Unix 风格

  • 选项参数

选项参数

说明

-A

显示所有进程,同 -e

-N

显示与指定参数不符的所有进程(默认显示除当前终端下的程序外所有程序),同 --deselect

-a

显示除控制进程和无终端进程外的所有进程

-d

显示除控制进程外的所有进程

-e

显示所有进程,同 -A

-C cmdlist

显示包含在 cmdlist 列表中的进程

-G grplist

显示组 ID 包含在 grplist 列表中的进程

-U userlist

显示属主用户 ID 包含在 userlist 列表中的进程,同 --User

-g grplist

显示会话或组 ID 在 grplist 列表中的进程(到底是会话 ID 还是有有效组 ID 取决与具体 Linux 发行版)

-p pidlist

显示 PID 在 pidlist 列表中的进程,同 p 和 --pid

-s sesslist

显示会话 ID 在 sesslist 列表中的进程

-t ttylist

显示终端 ID 在 ttylist 列表中的进程,同 t 和 --tty

-u userlist

显示有效用户 ID 在 userlist 列表中的进程,同 U 和 --user

-F

显示更多额外输出(相较于 -f 参数)

-O format

显示默认的输出列以及 format 列表指定的特定列

-M

显示进程的安全信息

-c

显示进程的额外调度信息

-f

显示完整格式的输出

-j

显示任务信息

-l

显示长列表

-o format

仅显示由 format 指定的列,同 o 和 --format

-y

不显示进程标记(process flag,表明进程状态)

-Z

显示安全标签(security context/label)信息

-H

用层级格式(树状格式,表明进程间的父子关系)来显示进程

-n namelist

设定名称列表文件路径(有些 Linux 发行版不支持)

-w

采用宽输出模式,不限宽度显示

-L

显示进程中的线程

-V

显示 ps 命令的版本号

  • Unix 风格为进程单字符状态码(输出为 S 列)

状态符号

说明

R(TASK_RUNNING)

正在运行或在运行队列中准备执行

S(TASK_INTERRUPTIBLE)

可中断睡眠状态,因等待某事件发生而被挂起

D(TASK_UNINTERRUPTIBEL)

不可中断(不响应异步信号,而不是不响应外部硬件中断)睡眠状态

I

空闲内核线程

T(TASK_STOPPED or TASK_TRACED)

暂停状态或跟踪状态(被作业控制信号暂停)

t

跟踪暂停状态(在跟踪调试过程中被调试器暂停)

Z(EXIT_ZOMBIE)

僵尸进程

X(EXIT_DEAD)

退出状态,进程即将被销毁

W

进程处于换页状态

  • 举例

显示控制程序和无终端程序:

代码语言:javascript
代码运行次数:0
运行
复制
ps -Na

本人终端显示结果如下:

代码语言:javascript
代码运行次数:0
运行
复制
PID   TTY         TIME      CMD
1      ?        00:00:02   systemd
2      ?        00:00:00   kthreadd
4      ?        00:00:00   kworker/0:0H
6      ?        00:00:00   mm_percpu_wq
7      ?        00:00:00   ksoftirqd/0
......

3.2 BSD 风格

  • 选项参数

选项参数

说明

T

显示跟当前终端关联的所有进程,同不带参数的 t

a

显示跟任意终端关联的所有进程

g

显示所有进程(包括控制进程)

r

仅显示运行中的进程

x

显示当前用户的所有进程,甚至包括未分配任何终端的进程(若和 a 连用则显示系统所有进程)

U userlist

显示属主用户 ID 包含在 userlist 列表中的进程

p pidlist

显示 PID 在 pidlist 列表中的进程

t ttylist

显示终端 ID 在 ttylist 列表中的进程

O format

显示默认的输出列以及 format 列表指定的特定列,同 -O

X

按过去的 Linux i386 寄存器格式显示

Z

将安全信息添加到输出中

j

显示任务信息

l

显示长列表

o format

仅显示由 format 指定的列

s

采用信号格式显示

u

采用基于用户的格式显示

v

采用虚拟内存格式显示

N namelist

设定名称列表文件路径(有些 Linux 发行版不支持)

O order

定义显示信息列的顺序,即指定输出信息排序规则(-O 没有此用法)

S

将数值信息从子进程加到父进程上(比如 CPU 和内存使用情况)

c

显示真实的命令名称(用以启动进程的程序名称)

e

显示命令使用的环境变量

f

用分层格式来显示进程(显示父子进程关系)

h

不显示头信息

k spec

指定用以将输出排序的列,同 --sort

n

用数值显示 WCHAN 和 USER 列

w

采用宽输出模式,不限宽度显示

H

将线程按进程来显示

m

在进程后显示线程

L

列出所有格式指示符(第一列用于 [-]o/O 后的 format 格式,第二列为输出对应显示的列名)

V

显示 ps 命令版本号

  • BSD 风格为进程多字符状态码(输出为 STAT 列):第一个状态码同 Unix 风格显示进程状态,其余字符进一步说明进程的状态。

状态符号

说明

<

表明该进程运行在高优先级上

N

表明该进程运行在低优先级上

L

表明该进程有页面锁定在内存中

s

表明该进程是控制进程

l

表明该进程是多线程的

+

表明改进程运行在前台

  • 举例

按照父进程 ID 排序显示进程信息:

代码语言:javascript
代码运行次数:0
运行
复制
ps k ppid O ppid

本人终端显示结果如下:

代码语言:javascript
代码运行次数:0
运行
复制
  PID  PPID S TTY          TIME COMMAND
 3088  3080 S pts/0    00:00:00 bash
 7869  3080 S pts/1    00:00:00 bash
10317  3080 S pts/2    00:00:00 bash
12429  3080 S pts/4    00:00:00 bash
22354  3080 S pts/6    00:00:00 bash
27861  3080 S pts/3    00:00:00 bash
21532 10317 S pts/2    00:00:00 man
16770 12429 R pts/4    00:00:00 ps
21542 21532 S pts/2    00:00:00 pager
27888 27861 S pts/3    00:00:00 man
27898 27888 S pts/3    00:00:00 pager

3.3 GNU 长参数风格

  • 选项参数

选项参数

说明

--deselect

显示与指定参数不符的所有进程(默认显示除当前终端下的程序外所有程序),同 -N

--Group grplist

显示组 ID 在 grplist 列表中的进程

--User userlist

显示用户 ID 在 userlist 列表中的进程

--group grplist

显示有效组 ID 在 grplist 列表中的进程

--pid pidlist

显示 PID 在 pidlist 列表中的进程

--ppid pidlist

显示父 PID 在 pidlist 列表中的进程

--sid sidlist

显示会话 ID 在 sidlist 列表中的进程

--tty ttylist

显示终端设备号在 ttylist 列表中的进程

--user userlist

显示有效用户 ID 在 userlist 列表中的进程

--format format

仅显示由 format 指定的列

--context

显示额外的安全信息

--cols/columns n

将屏幕宽度设置为 n 列

--cumulative

包含已停止的子进程的信息

--forest

用层级结构显示出进程和父进程之间的关系

--headers

在每页输出中都显示列的头

--no-headers

不显示列的头

--lines n

将屏幕高度设为 n 行

--rows n

将屏幕高度设为 n 排

--sort spec

指定将输出按哪列排序

--width n

将屏幕宽度设为 n 列

--help

显示帮助信息

--info

显示调试信息

--version

显示 ps 命令的版本号

  • 举例

按照父进程 ID 排序显示进程信息:

代码语言:javascript
代码运行次数:0
运行
复制
ps --sort ppid --format pid,ppid,tty,cmd

本人终端显示结果如下:

代码语言:javascript
代码运行次数:0
运行
复制
  PID  PPID TT       CMD
12429  3080 pts/4    bash
18446 12429 pts/4    ps --sort ppid --format pid,ppid,tty,cmd

4. 详解

4.1 BSD 风格 O order 参数

  • 格式
代码语言:javascript
代码运行次数:0
运行
复制
O[+|-]key1[,[+|-]key2[,...]]

其中,+ 表示顺序,- 表示逆序。

  • key 值表

key

全称

说明

c

cmd

进程启动的程序名称

C

pcpu

CPU 利用率

f

flags

长列表格式中的 F 列

g

pgrp

进程组 ID

G

tpgid

tty进程组ID(为连接到 tty 则为 -1)

j

cutime

累计用户时间

J

cstime

累计系统时间

k

utime

用户时间

m

min_flt

次要页错误数

M

maj_flt

主要页错误数

n

cmin_flt

累计次要页错误数

N

cmaj_flt

累计主要页错误数

o

session

会话 ID

p

pid

进程 ID

P

ppid

父进程 ID

r

rss

进程驻留内存占用空间大小

R

resident

驻留内存页

s

size

占用内存大小(KB)

S

share

共享页数量

t

tty

控制终端 tty 设备号

T

start_time

进程启动至今所过时间

U

uid

用户 ID

u

user

用户名

v

vsize

总占用虚拟内存空间大小(KB)

y

priority

内核调度优先级

  • 举例

按照 PID 逆序输出所有进程信息:

代码语言:javascript
代码运行次数:0
运行
复制
ps -AFl O-p

本人终端结果如下:

代码语言:javascript
代码运行次数:0
运行
复制
F	S	UID	        PID	        PPID	C	PRI	NI	ADDR	SZ	WCHAN	RSS	    PSR	STIME	TTY	TIME	CMD
1	S	zhangji+	29974	4619	0	80	0	-	197384	futex_	100904	3	20:20	?	0:00	    /opt/google/chrom
1	S	zhangji+	29953	4619	0	80	0	-	192882	futex_	117896	3	20:20	?	0:00	    /opt/google/chrom
1	S	zhangji+	29923	4619	0	80	0	-	180153	futex_	69972	1	20:20	?	0:00	    /opt/google/chrom
1	S	zhangji+	29885	4619	0	80	0	-	202766	futex_	112476	2	20:20	?	0:02	    /opt/google/chrom
1	S	zhangji+	29856	4619	0	80	0	-	205781	futex_	127136	6	20:20	?	0:01	    /opt/google/chrom
......

4.2 AIX 格式描述符

  • 格式
代码语言:javascript
代码运行次数:0
运行
复制
[-]o/O format

其中,format 为格式字符串(类似 printf 的格式,不同格式中间可自选分隔符)。

  • format 中可选格式列表如下:

格式

含义

输出列名

%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

  • 举例

输出所有进程的 PID、TTY 号、当目前为止进程运行的累计 CPU 时间、CPU 占用率,并且自定义分隔符:

代码语言:javascript
代码运行次数:0
运行
复制
ps -eo "%p -%y,%x %c"

本人终端结果如下:

代码语言:javascript
代码运行次数:0
运行
复制
PID -TTY     ,    TIME COMMAND
  1 -?       ,00:00:02 systemd
  2 -?       ,00:00:00 kthreadd
  4 -?       ,00:00:00 kworker/0:0H
  6 -?       ,00:00:00 mm_percpu_wq
  ......

4.3 常用标准格式描述符

  • 格式
代码语言:javascript
代码运行次数:0
运行
复制
[-]o/O key1[=rename1|:width1][[[,| ][key2[=rename2|:width1]]...]
--sort [+|-]key1[,[+|-]key2[,...]]

其中,keyn 为指定格式描述符,renamen 为重命名输出列名,widthn 为指定输出列宽度,+ 表示顺序而 - 表示逆序。

  • 常用格式描述符列表

格式描述符

列名

说明

user/euser/uname

USER/EUSER

有效用户名

uid/euid

UID/EUID

启动进程的有效用户 ID

pid/tgid

PID/TGID

进程 ID

ppid

PPID

父进程 ID

pgid/pgrp

PGID/PGRP

进程组 ID

c

C

进程生命周期中的 CPU 利用率

%cpu/pcpu

%CPU

CPU 占用率

%mem/pmem

%MEM

内存使用率

start/start_time/stime

进程启动时的系统时间

etime

ELAPSED

进程启动至今经过的时间([DD-]HH:MM:SS 格式输出)

etimes

ELAPSED

进程启动至今经过的时间(秒)

time/cputime

TIME

当目前为止进程运行的累计 CPU 时间([DD-]HH:MM:SS 格式输出)

times/cputimes

TIME

当目前为止进程运行的累计 CPU 时间(秒)

args/cmd/command

CMD/COMMAND

进程启动的程序命令

comm/ucmd/ucomm

COMMAND/CMD

进程启动的可执行文件名

tt/tty

TT

进程启动时的终端设备

f/flag/flags

F

内核分配给进程的系统标记

s/state

S

进程单字符状态符

stat

STAT

进程多字符状态符

pri

PRI

进程优先级(值越大优先级越低)

ni/nice

NI

谦让度,参与决定优先级

size

SIZE

进程换出需要的交换空间大致大小

sz

SZ

进程所占物理页大小

vsz/vsize

VSZ

进程所占虚拟内存大小(KB)

rss/rssize/rsz

RSS/RSZ

进程驻留内存占用空间大小(kB)

wchan

WCHAN

进程休眠的内核函数名称(- 表示进程正在运行,* 表示为多线程进程)

  • 举例

按照自定义格式 pid,ppid,pgrp,comm 显示指定字段的进程信息:

代码语言:javascript
代码运行次数:0
运行
复制
ps -o pid,ppid,pgrp,comm

本人终端显示结果如下:

代码语言:javascript
代码运行次数:0
运行
复制
PID  PPID    PGRP    COMMAND
6776  13466   6776     bash
6858  2307    6851    python3
9412  6776    9412    ps

5. 常用参数组合

5.1 查看系统上运行的所有进程

代码语言:javascript
代码运行次数:0
运行
复制
# Unix 风格
ps -ef
ps -eF      # 信息更加详细
# BSD 风格
ps ax
ps axu

5.2 采用层级结构显示系统上运行的所有进程

代码语言:javascript
代码运行次数:0
运行
复制
ps -efH
ps -ef f    # 层级结构更清晰
ps axf

5.3 获取线程信息

代码语言:javascript
代码运行次数:0
运行
复制
ps -eLf
ps axms

5.4 获取安全信息

代码语言:javascript
代码运行次数:0
运行
复制
ps -eM
ps -axZ
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 简介
  • 2. 格式
  • 3. 选项
    • 3.1 Unix 风格
    • 3.2 BSD 风格
    • 3.3 GNU 长参数风格
  • 4. 详解
    • 4.1 BSD 风格 O order 参数
    • 4.2 AIX 格式描述符
    • 4.3 常用标准格式描述符
  • 5. 常用参数组合
    • 5.1 查看系统上运行的所有进程
    • 5.2 采用层级结构显示系统上运行的所有进程
    • 5.3 获取线程信息
    • 5.4 获取安全信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档