ps:报告当前进程的快照。
简介: ps [参数]
说明:ps 显示有关所选活动进程的信息。如果要重复更新所选内容和显示的信息,请改用top
参数格式
1、UNIX选项,可以分组,前面必须有破折号。
2、BSD选项,可以分组,不能与破折号一起使用。
3、GNU long选项,前面有两个破折号。
注释:
BSD是泛指类unix系统
GUN 是指一个开源的操作系统
不同类型的选项可以自由混合,但可能会出现冲突。有一些同义选项,功能相同(因为ps版本兼容导致重复)
注意
“ps-aux”与“ps aux”不同。
POSIX和UNIX标准要求“ps-aux”打印名为“x”的用户拥有的所有进程,以及打印-a选项选择的所有进程。
如果名为“x”的用户不存在,这个ps可能会将命令解释为“ps aux”,并打印警告。
这种行为旨在帮助转变旧的脚本和习惯。
它是脆弱的,随时可能改变,因此不应依赖。
默认情况下,ps选择与当前用户具有相同有效用户ID的所有进程,并与调用程序关联到同一终端。
它显示进程ID(pid=pid)、与进程关联的终端(tname=TTY)、以[DD-]hh:mm:ss格式(时间=时间)的累计CPU时间以及可执行名称(ucmd=CMD)。
默认情况下,输出未排序。
[root@localhost ~]# ps
PID TTY TIME CMD
6032 pts/1 00:00:00 bash
11305 pts/1 00:00:00 sleep
11318 pts/1 00:00:00 ps
使用BSD样式选项将向默认显示添加进程状态(stat=stat),并显示命令args(args=command),而不是可执行文件名。
BSD:不带破折号的参数
[root@localhost ~]# ps a
PID TTY STAT TIME COMMAND
1587 tty1 Ss+ 0:00 -bash
6007 pts/0 Ss+ 0:00 -bash
6032 pts/1 Ss 0:00 -bash
11697 pts/1 R+ 0:00 ps a
[1]+ Done sleep 30
示例
标准语法
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 06:22 ? 00:00:04 /usr/lib/systemd/systemd --switched-root --system
root 2 0 0 06:22 ? 00:00:00 [kthreadd]
程序和进程
1、程序:程序是静止的,程序就是磁盘上的一个文件。
2、进程:进程是一个正在执行的程序的实例。是动态的
3、一旦程序被操作系统加载进内存了,那么程序就成为了进程。
PID 和PPID
1、PID:PID是程序被操作系统加载到内存成为进程后动态分配的资源。
每次程序执行的时候,操作系统都会重新加载,PID在每次加载的时候都是不同的
2、PID和PPID都是非零的整数
3、PPID:是程序的父进程号
4、PID是唯一的,一个PID只标识一个进程。
5、一个进程创建的另一个新进程称为子进程。相反地,创建子进程的进程称为父进程。
特殊说明
1、所有进程追溯其祖先最终都会落到进程号为1的进程身上,这个进程叫init进程。
2、init进程是linux内核启动后的第一个执行的进程。
3、init引导系统,启动守护进程并运行必要的程序。
BSD语法
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 128164 6820 ? Ss 06:22 0:04 /usr/lib/systemd/systemd --switched-root --syst
root 2 0.0 0.0 0 0 ? S 06:22 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 06:22 0:00 [kworker/0:0H]
注释
USER 运行的用户
PID 进程号
%CPU 占用CPU运行时间的百分比
%MEM 占用内存大小的百分比
TTY 进程关联的终端
VSZ 进程虚拟内存大小
RSS 常驻集大小,任务使用的非交换物理内存(千字节)
STAT 进程运行状态
START 进程开始运行的时间
TIME 累计CPU时间
COMMAND 注释
打印流程树
[root@localhost ~]# ps -ejH
PID PGID SID TTY TIME CMD
2 0 0 ? 00:00:00 kthreadd
4 0 0 ? 00:00:00 kworker/0:0H
6 0 0 ? 00:00:00 ksoftirqd/0
注释:
PGID 进程组标识,等效进程组负责人的进程标识。
SID 会话ID,或者相当于会话负责人的进程ID。
获取有关线程的信息
[root@localhost ~]# ps -eLf
UID PID PPID LWP C NLWP STIME TTY TIME CMD
root 1 0 1 0 1 Oct14 ? 00:00:04 /usr/lib/systemd/systemd --switched-root --system -
root 2 0 2 0 1 Oct14 ? 00:00:00 [kthreadd]
UID 用户uid
PID 进程id
PPID 父进程id
LWP 可分派实体的轻量级进程(线程)ID
C 处理器利用率
NLWP 进程中的线程数
STIME 进程开始的时间
TTY 进程关联的终端
TIME 累计CPU时间
CMD 说明
[root@localhost ~]# ps axms
UID PID PENDING BLOCKED IGNORED CAUGHT STAT TTY TIME COMMAND
0 1 0000000000000000 - - - - ? 0:04 /usr/lib/sy
0 - 0000000000000000 7be3c0fe28014a03 0000000000001000 00000001800004ec Ss - 0:04 -
UID 用户id
PID 进程id
PENDING 挂起信号的掩饰码
BLOCKED 封锁信号的屏蔽
IGNORED 忽略信号屏蔽
CAUGHT 捕获信号的屏蔽
STAT 多字符进程状态。
TTY 进程关联的终端
获取安全信息
[root@localhost ~]# ps axZ
LABEL PID TTY STAT TIME COMMAND
system_u:system_r:init_t:s0 1 ? Ss 0:04 /usr/lib/systemd/systemd --switched-root --system --d
system_u:system_r:kernel_t:s0 2 ? S 0:00 [kthreadd]
LABEL 安全标签,最常用于SELinux上下文数据。
PID 进程id
TTY 进程关联的终端
STAT 多字符进程状态。
TIME 累计CPU时间
COMMAND 说明
指定用户运行的进程
示例中使用的chrony
[root@localhost ~]# ps -U chrony -u chrony u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
chrony 692 0.0 0.0 117808 1852 ? S Oct14 0:00 /usr/sbin/chronyd
USER 运行的用户
PID 进程号
%CPU 占用CPU运行时间的百分比
%MEM 占用内存大小的百分比
VSZ 进程虚拟内存大小
RSS 常驻集大小,任务使用的非交换物理内存
TTY 进程关联的终端
STAT 进程运行状态
START 进程开始运行的时间
TIME 累计CPU时间
COMMAND 注释
参数选项
(因为参数重复太多,决定不记录man手册整理)
-A 选择所有进程。与-e相同。
-a 选择除会话引导程序和与终端无关的进程之外的所有进程。
-d 选择除会话引导程序之外的所有进程。
-f 做完整的格式列表
自定义打印信息
[root@localhost ~]# ps -eo "%p %y %x %c %z"
PID TTY TIME COMMAND VSZ
1 ? 00:00:04 systemd 128164
2 ? 00:00:00 kthreadd 0
自定义列表
CODE NORMAL HEADER
%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
进程占用内存大小排序
ps aux | sort -k4,4nr | head -n 10
进程标志
这些值的总和显示在“F”列中,该列由标志输出说明符提供:
1 分叉但没有执行
4 使用的超级用户权限
进程状态
D 不可中断睡眠 (通常是在IO操作) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生
R 正在运行或可运行(在运行队列排队中)
S 可中断睡眠 (休眠中, 受阻, 在等待某个条件的形成或接受到信号)
T 已停止的 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行
W 正在换页(2.6.内核之前有效)
X 死进程 (未开启)
Z 僵尸进程 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放BSD风格的
< 高优先级(not nice to other users)
N 低优先级(nice to other users)
L 页面锁定在内存(实时和定制的IO)
s 一个信息头
l 多线程(使用 CLONE_THREAD,像NPTL的pthreads的那样)
+ 在前台进程组
标准格式说明符
以下是不同的关键字,可用于控制输出格式(例如,使用选项-o)或使用GNU样式——排序选项。
例如: ps -eo pid,user,args --sort user
此版本的ps尝试识别ps的其他实现中使用的大多数关键字。
以下用户定义的格式说明符可能包含空格: args, cmd, comm, command, fname, ucmd, ucomm, lstart, bsdstart, start.
某些关键字可能无法用于排序。
CODE HEADER DESCRIPTION
%cpu %CPU 进程的cpu利用率为“##.#”格式。目前,它是CPU使用时间除以进程的时间
%mem %MEM 进程的驻留集大小与计算机上物理内存的比率,以百分比表示。
args COMMAND 命令及其所有参数都是字符串
blocked BLOCKED 封锁信号的屏蔽,根据字段的宽度,十六进制格式的32位或64位掩码
bsdstart START 命令启动的时间。
bsdtime TIME 累计cpu时间,用户+系统。
c C 处理器利用率。当前,这是进程生存期内使用百分比的整数值。
caught CAUGHT 捕获信号的屏蔽,以十六进制的格式显示64位或64位的字段宽度。
cgroup CGROUP 显示进程所属的控制组。
class CLS 进程的调度类。字段的可能值为:
- 未报告
TS 计划其他
FF 计划先进先出
RR 计划
B 计划批次
ISO 计划
IDL 计划空闲
DLN 截止日期
? 未知值
comm COMMAND 命令名
cp CP 每百万(十分之一)的CPU使用率。
cputime TIME 累计CPU时间,“[DD-]hh:mm:ss”格式。(别名时间)。
drs DRS 数据驻留集大小,用于非可执行代码的物理内存量。
egid EGID 进程的有效组ID号(十进制整数)。(化名gid)。
egroup EGROUP 进程的有效组ID。这将是文本组ID(如果可以获得并且字段宽度允许),否则为十进制表示。(别名组)。
eip EIP 指令指针。
esp ESP 堆栈指针。
etime ELAPSED 自进程启动以来经过的时间,格式为[[DD-]hh:]mm:ss。
etimes ELAPSED 自进程启动以来经过的时间,以秒为单位。
euid EUID 用户ID(有效别名)。
euser EUSER 有效用户名
f F 与进程关联的标志,请参阅进程标志部分。(别名标志,标志)。
fgid FGID 系统访问组ID(别名fsgid)。
fgroup FGROUP 文件系统访问组ID
fname COMMAND 进程可执行文件的基名称的前8个字节。此列中的输出可能包含空格。
fuid FUID 文件系统访问用户ID(别名fsuid)。
fuser FUSER 文件系统访问用户ID
group GROUP see egroup. (alias egroup).
ignored IGNORED 忽略信号屏蔽
ipcns IPCNS 描述进程所属命名空间的唯一索引节点编号。
label LABEL 安全标签,最常用于SELinux上下文数据。这是针对高安全系统中的强制访问控制(“MAC”)。
lstart STARTED 命令启动时间
lsession SESSION 显示进程的登录会话标识符(如果包含systemd支持)。
luid LUID 显示与进程关联的登录ID。
lwp LWP 可分派实体的轻量级进程(线程)ID(别名spid,tid)。更多信息见tid。
machine MACHINE 显示分配给VM或容器的进程的计算机名称(如果已包括systemd支持)。
maj_flt MAJFLT 此进程中发生的主要页错误数。
min_flt MINFLT 此过程中发生的次要页面错误数。
mntns MNTNS 描述进程所属命名空间的唯一索引节点编号。请参见名称空间(7)。
netns NETNS 描述进程所属命名空间的唯一索引节点编号。请参见名称空间(7)。
ni NI 不错的价值。范围从19(最好)到-20(对他人不好),请参见nice(1)。(化名尼斯)。
nlwp NLWP 进程中的线程数(LWP)。(别名thcount)。
nwchan WCHAN 进程休眠的内核函数的地址(如果需要内核函数名,请使用wchan)。正在运行的任务将在此列中显示破折号('-')。
ouid OWNER 显示进程会话所有者的Unix用户标识符(如果包含systemd支持)。
pending PENDING 挂起信号的掩饰码
pgid PGID 进程组标识,或者等效地,进程组负责人的进程标识。(别名pgrp)。
pid PID 表示进程ID的数字(别名tgid)。
pidns PIDNS 描述进程所属命名空间的唯一索引节点编号。请参见名称空间(7)。
policy POL 进程调度类
ppid PPID 父进程ID。
pri PRI 进程的优先级。数字越大,优先级越低。
psr PSR 进程当前分配给的处理器。
rgid RGID 真实组ID。
rgroup RGROUP 真实组名。这将是文本组ID(如果可以获得并且字段宽度允许),否则为十进制表示。
rss RSS 常驻集大小,任务已使用的非交换物理内存(以千字节为单位)。(别名rssize,rsz)。
rtprio RTPRIO 实时优先级。
ruid RUID 真实用户ID。
ruser RUSER 真实用户ID
s S 最小状态显示(一个字符)
sched SCH 进程调度策略
seat SEAT 显示与分配给特定工作区的所有硬件设备相关联的标识符
sess SESS 会话ID,或者相当于会话负责人的进程ID。(别名会话,sid)。
sgi_p P 当前正在其上执行进程的处理器。如果进程当前未运行或不可运行,则显示“*”。
sgid SGID 已保存组ID。(别名svgid)。
sgroup SGROUP 已保存组名。这将是文本组ID(如果可以获得并且字段宽度允许),否则为十进制表示。
size SIZE 如果进程脏掉所有可写页,然后将其换出,则所需的大约交换空间量。这个数字很粗糙!
slice SLICE 如果包含systemd支持,则显示进程所属的切片单元。
stackp STACKP 程序栈底部的地址
start_time START 进程的开始时间或日期。
stat STAT 多字符进程状态。
suid SUID 已保存用户ID.(别名svuid)。
supgid SUPGID 任何组的补充ID。请参见getgroups(2)。
supgrp SUPGRP 补充组的组名(如有)。请参见getgroups(2)。
suser SUSER 已保存用户名。
sz SZ 进程核心映像的物理页大小。这包括文本、数据和堆栈空间。设备映射是目前排除在外;这可能会发生变化。请参见vsz和rss。
tgid TGID 表示任务所属线程组的数字(别名pid)。它是线程组的进程ID领导。
thcgr THCGR 显示线程所属的控制组。
tid TID 表示可分派实体(别名lwp,spid)的唯一编号。此值也可能显示为:进程ID(pid);
time TIME 累计CPU时间,“[DD-]HH:MM:SS”格式。(别名cputime)。
tname TTY 控制tty(终端)。(别名tt,tty)。
tpgid TPGID 进程所连接到的tty(终端)上前台进程组的标识,如果进程未连接到,则为-1
trs TRS 文本驻留集大小,用于可执行代码的物理内存量。
unit UNIT 如果包含systemd支持,则显示进程所属的单元。
userns USERNS 描述进程所属命名空间的唯一索引节点编号。请参见名称空间(7)。
utsns UTSNS 描述进程所属命名空间的唯一索引节点编号。请参见名称空间(7)。
uunit UUNIT 如果包含systemd支持,则显示进程所属的用户单元。
vsz VSZ 进程的虚拟内存大小,以KiB(1024字节单位)为单位。设备映射当前被排除;这取决于改变。(别名)。
wchan WCHAN 进程处于休眠状态的内核函数的名称;如果进程正在运行,则为“-”;如果进程是多线程且ps不显示线程,则为“*”。
实例
ps axo pid,comm,pcpu # 查看进程的PID、名称以及CPU 占用率
ps aux | sort -rnk 4 # 按内存资源的使用量对进程进行排序
ps aux | sort -nk 3 # 按 CPU 资源的使用量对进程进行排序
ps -A # 显示所有进程信息
ps -u root # 显示指定用户信息
ps -efL # 查看线程数
ps -e -o "%C : %p :%z : %a"|sort -k5 -nr # 查看进程并按内存使用大小排列
ps -ef # 显示所有进程信息,连同命令行
ps -ef | grep ssh # ps 与grep 常用组合用法,查找特定进程
ps -C nginx # 通过名字或命令搜索进程
ps aux --sort=-pcpu,+pmem # CPU或者内存进行排序,-降序,+升序
ps -f --forest -C nginx # 用树的风格显示进程的层次关系
ps -o pid,uname,comm -C nginx # 显示一个父进程的子进程
ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm # 重定义标签
ps -e -o pid,comm,etime # 显示进程运行的时间
ps -aux | grep named # 查看named进程详细信息
ps -o command -p 91730 | sed -n 2p # 通过进程id获取服务名称