Linux 命令(73)—— ps 命令
1.命令简介
ps(Process Status)命令用于查看系统当前进程状态。ps 命令查看的进程信息是当前的一个快照,如果想实时动态地查看进程信息,可以使用 top 命令。
ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以查看进程的属主、进程ID、父进程ID、启动时间、占用 CPU 时长、启动命令、当前运行的状态等等,总之大部分信息都是可以通过执行该命令得到。ps 命令可以搭配 kill 命令随时终止不必要的进程。
ps 命令可接收多种类型的命令选项,主要有:
(1)Unix 选项,可以分组,选项前面必须有一个连字符;
(2)BSD 选项,可以分组,不能与连字符一起使用;
(3)GNU long 选项,前面有两个连字符。
不同类型的选项可以自由混合,但可能会出现冲突。有一些同义的选项,它们在功能上是相同的。
默认情况下,ps 选择与当前用户具有相同有效用户 ID(EUID)且与调用者终端关联的所有进程。它显示进程 ID(PID)、与进程相关联的终端(TTY)、以 [DD-]hh:mm:ss 格式累积的 CPU 时间(TIME)和可执行文件名(CMD)。默认情况下输出不排序。
2.命令格式
ps [OPTIONS]
3.选项说明
简单的进程选择(SIMPLE PROCESS SELECTION)
a显示与终端关联的所有进程,包括其他用户的进程。一般与 x 选项联用,用于显示所有进程
-A选择所有进程,等同于 -e
-a选择除会话引导进程(参见 getsid(2))和与终端无关的进程之外的所有进程
-d选择除会话引导进程外的所有进程
--deselect选择除满足指定条件进程之外的所有进程。等同于 -N
-e选择所有进程,等同于 -A
-N选择除满足指定条件进程之外的所有进程。等同于 --deselect
T选择与当前终端关联的所有进程。等同于没有参数的选项 t
r只显示运行状态的进程
x显示 EUID(有效用户ID )等同于 ps 命令的所有进程,包括与终端无关联的进程。一般与 a 选项联用,用于显示所有进程通过参数列表选择进程(PROCESS SELECTION BY LIST)
-C cmdlist按照命名名称选择进程
<pid>
-<pid>
p pidlist
-p pidlist
--pid pidlist按照进程 ID 选择进程
--Group <grplist>按照实际用户组 ID(RGID,real group ID)或者用户组名称选择进程
--group <grplist>按照有效用户组 ID(EGID,effective group ID)或者有效用户组名称选择进程
--ppid pidlist按照父进程 ID 选择进程
q pidlist
-q pidlist
--quick-pid pidlist按进程 ID 以快速模式选择。比如不会选择父进程 ID 出现在 pidlist 的进程
-s sesslist
--sid sesslist按 session ID 选择
t ttylist
-t ttylist按终端名称选择
-U userlist
--User userlist按实际用户 ID(RUID,real user ID)选择
U userlist
-u userlist
--user userlist按有效用户 ID(EUID,effective user ID)选择输出格式控制(OUTPUT FORMAT CONTROL)
-f以完整的格式输出,常与 -e 一起使用。此选项可以与许多其他 Unix 样式的选项组合,来添加其他列,比如与 -L 一起使用时,显示 LWP(线程 ID)和 NLWP(线程数)列。它还导致命令参数被打印
-F在 -f 选项的基础上,添加 SZ、RSS、PSR 列
o format
-o format
--format format用户自定义输出格式,以指定的宏选择需要输出的 UNIX or BSD 列
j以 BSD 任务控制格式输出
-j以任务格式输出
l以 BSD 长格式输出
-l以长格式输出,经常与 -y 选项一起使用
Z
-M添加一列安全数据。用于 SELinux
O format
-O format用户自定义输出格式,其中会预定义一些公共字段。等同于 -o pid,format,state,tname,time,command 或 -o pid,format,tname,time,cmd
s以程序信号的格式输出
u以用户为主的格式来输出,常与 ax 选项一起使用
v以虚拟内存的格式输出
X以寄存器格式输出
-y以 RSS 列代替 ADDR。此选项只能与 -l 一起使用输出修饰符(OUTPUT MODIFIERS)
c列出命令一栏 CMD 时,显示命令的名称,而不包含路径、命令参数或修饰符。可以与 -f 选项联用,只显示命令的名称
--cols n
--columns n设置每列的最大字符数
S
--cumulative统计进程相关数据时,比如 CPU 使用率,包括已经死掉的进程
e在 COMMAND 列后输出环境变量
f
--forest用ASCII字符显示树状结构,表达程序间的相互关系
h不显示列名
-H显示树状结构,表示程序间的相互关系
--headers重复输出列名,每页输出一行列名
k spec
--sort spec指定排序规则。spec 语法是 [+|-]key[,[+|-]key[,...]],其中 + 表示递增,- 表示递减,默认为递增。key 表示列名称,比如 pid(进程 ID)、ppid(父进程 ID)。如果以 pid 递减输出,可以指定 k -pid 或 --sort -pid
n以数字表示 USER 和 WCHAN 列,包括 UID 和 GID
-n namelist
N namelist设置查找内核函数名称的文件,用于正确地显示 WCHAN 列。默认搜索路径为:$PS_SYSMAP$PS_SYSTEM_MAP/proc/*/wchan/boot/System.map-$(uname -r)/boot/System.map/lib/modules/$(uname -r)/System.map/usr/src/linux/System.map/System.map
--no-headers
--no-heading不输出列名
O order按照指定的列进行排序,语法是 O[+|-]k1[,[+|-]k2[,...]]。其中 + 表示递增,- 表示递减,默认为递增。k1,k2... 表示列名称的一个字母简称,比如 p(进程 ID)、P 表示(父进程 ID)。如果以 pid 递减输出,可以指定 O -p。列名称的单个字母简称详见手册
--rows n设置每页显示的行数
w
-w采用宽格式输出
--width n每列字符数线程展示(THREAD DISPLAY)
H将线程当做进程显示
-L显示线程,可能使用 LWP(线程 ID) 和 NLWP(线程数) 列
m在进程后显示线程
L列出所有输出格式说明符
V
-V
--version打印 procps-ng 软件包的版本。procps-ng 软件包包含了一系列查看和管理系统和进程的工具,比如 ps, top, vmstat, w, kill, free, slabtop, skill 等命令。
进程状态代号(PROCESS STATE CODES)取值如下,一般是 STAT 或者 S 列。
D 不可中断的睡眠状态,通常在等待 IO
R 运行或就绪状态
S 可中断的睡眠状态,比如正在等待某个事件的完成
T 被作业控制信号停止
t 在跟踪期间被调试器停止
W 分页中. 不适用于内核2.6.xx及以后的版本
X 死亡
Z 僵尸进程,已终止,但未被父进程回收
对于 BSD 风格的输出格式,进程状态 STAT 列可能会出现其它字符:
< 高优先级
N 低优先级
L 有些页被锁进内存
s 包含子进程
l 多线程
+ 属前端进程组,与终端关联
其它概念,比如输出列的说明符、输出列的含义、影响 ps 的环境变量等,详见 ps 手册。
4.常用示例
(1)使用标准语法查看所有进程。
ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 2018 ? 01:44:29 /usr/lib/systemd/systemd --system --deserialize 19
root 2 0 0 2018 ? 00:00:19 [kthreadd]
root 3 2 0 2018 ? 00:00:27 [ksoftirqd/0]
root 5 2 0 2018 ? 00:00:00 [kworker/0:0H]
root 7 2 0 2018 ? 00:01:03 [migration/0]
...
各列含义如下:
UID 启动进程的用户 ID
PID 进程 ID
PPID 父进程 ID
C CPU 使用率,等于 CPU 所有核占用时间比上进程运行的总时间,多核的情况下可能会大于 100%。等同于列 %CPU
STIME 进程开始时间
TTY 启动进程的终端
TIME 占用 CPU 的累加时间
CMD 命令名称及参数
(2)使用 BSD 语法查看所有进程。
ps axu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 45120 2708 ? Ss 2018 104:29 /usr/lib/systemd/systemd --system --deserialize 19
root 2 0.0 0.0 0 0 ? S 2018 0:19 [kthreadd]
root 3 0.0 0.0 0 0 ? S 2018 0:27 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 2018 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 2018 1:03 [migration/0]
...
相对于ps -ef
,多出了如下几列:
USER 启动进程的用户名称。等于 ps -ef 输出的 UID 列
%CPU CPU 使用率。等于 ps -ef 输出的 C 列
%MEM 内存使用率
VSZ 虚拟内存大小,单位 KB
RSS 常驻物理内存大小,单位 KB
STAT 进程状态
COMMAND 命令名称及参数。等于 ps -ef 输出的 CMD 列
(3)以 PID 列按递减序输出。
ps -ef --sort -pid
UID PID PPID C STIME TTY STAT TIME CMD
root 31806 1 0 2018 ? Ss 0:00 /usr/sbin/sshd
root 30105 2 0 Sep19 ? S 0:23 [kworker/u12:1]
root 27902 2 0 2018 ? S< 0:00 [ext4-dio-unwrit]
root 27901 2 0 2018 ? S 6:28 [jbd2/vda2-8]
...
(4)按照可执行文件名称查看进程信息。
ps -C sshd -f
UID PID PPID C STIME TTY TIME CMD
root 524 1 0 2018 ? 00:00:00 /usr/sbin/sshd -D -f /etc/ssh/sshd_config.l
root 23881 31806 0 Oct03 ? 00:00:11 sshd: root@pts/0,pts/1
root 31806 1 0 2018 ? 00:00:00 /usr/sbin/sshd
5.拓展知识
5.1 UID、RUID、EUID、SUID 的区别
RUID(Real User ID)即 UID,表示真实用户 ID。创建进程的用户 ID 即为 RUID。
EUID(Effective User ID)表示有效用户 ID,用于系统决定用户对文件的访问权限,也就是说当用户做任何一个操作时,最终看它有没有权限,都是判断有效用户 ID 是否有权限。一般情况下 EUID 等于 RUID。
SUID(Set User ID)用于权限的开放,具有 SUID 权限的文件会在其执行时,使调用者临时获得该文件拥有者的权限,即将调用者的 EUID 变为该文件拥有者的 UID。
比如存放用户名及密码的文件 /etc/shadow 权限如下:
ls -lh /etc/shadow
---------- 1 root root 853 Jan 4 2019 /etc/shadow
可见 shadow 文件的属主是 root,但是任何用户都可以使用 passwd 命令修改它。
ls -lh /usr/bin/passwd
-rwsr-xr-x 1 root root 28K Jun 10 2014 /usr/bin/passwd
注意属主的权限执行位是 s,表示 passwd 命令具有 SUID 权限,它使一般用户在执行 passwd 命令的时候,拥有了 root 的权限。
参考文献
[1] ps(1) manual
[2] 简书.linux系统中的 UID RUID EUID SUID
Linux 命令(73)—— ps 命令相关推荐
- 每天一个linux命令(53)--ps命令
要毁掉一天,从早上开始. Linux中的ps命令是 process status 的缩写.ps 命令用来列出系统中当前运行的那些进程.ps 命令列出的是当前那些进程的快照,就是执行ps 命令的那个时刻 ...
- Linux下使用ps命令来查看Oracle相关的进程
Linux下可以使用ps命令来查看Oracle相关的进程 Oracle Listener 这个命令会列出Oracle Net Listener的进程 [oracle@ www.linuxidc.com ...
- linux里netstat与ps,理解proc目录与linux进程、ps命令、netstat命令的关系
零.proc目录简介 proc目录是虚拟文件系统(VFS)的一种实现,保存了进程信息(pid目录)和一些系统信息. 一.系统的信息 1.cpuinfo和meminfo两个文件 查看CPU和内存相关信息 ...
- oracle EBS查进程,Linux下使用ps命令来查看Oracle DB以及EBS相关的进程
Linux下可以使用ps命令来查看Oracle相关的进程 使用ps来查看Oracle数据库相关的服务 Oracle Listener 这个命令会列出Oracle Net Listener的进程 [or ...
- linux 命令 kps,ps命令
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- linux系统使用ps,Linux如何使用ps命令示例教程
玩蛇网推荐图文教程:python 列表 Linux如何使用ps命令示例教程,linux的ps命令是一个查看系统运行的进程的一个最基础的工具. 它提供了一个当前进程的快照,还带有一些具体的信息:比如用户 ...
- Linux下使用ps命令查看进程状态【ps常用命令】
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- linux下的ps命令
ps命令用于报告当前系统的进程状态.可以搭配kill指令随时中断.删除不必要的程序.ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程 ...
- linux下怎么监控网络 io swap,监控io性能,free命令,ps命令,查看网络状态,linux下抓包...
监控io性能 [root@localhost ~]# iostat Linux 3.10.0-514.el7.x86_64 (localhost.localdomain) 2017年09月12日 _x ...
- 七周二次课(5月7日)监控io性能、free命令、ps命令、查看网络状态、linux下抓包...
2019独角兽企业重金招聘Python工程师标准>>> 10.6 监控IO性能 1.监控 io 性能 这个 iostat 命令,在安装 sar 命令的时候,就一起安装了,所以不用重新 ...
最新文章
- python第三方库排行-scikit-learn: Python强大的第三方库
- day06:02oracle体系结构_存储结构
- phpstorm调试php配置,PhpStorm配置Xdebug调试WordPress
- java代码轻量级锁_Java轻量级锁原理详解(Lightweight Locking)
- Linux加密框架 crypto RC4
- SHT1x/SHT7x数字温湿度传感器驱动编写
- annotation的理解
- JAVA 版本微信公众管理开源项目招募伙伴
- RAC srvctl 命令报 libpthread.so.0 cannot open shared object file No such file or directory 解决方法...
- python练手经典100例-10 个最值得 Python 新人练手的有趣项目
- 计算机毕业论文java毕业设计论文题目基于SpringBoot项目源码旅游信息管理系统[包运行成功]
- 猫扑_猫女郎图片批量下载器
- 姐们儿,你就忍了吧—咱们一起骂老板(4)
- Windows Installer (无法访问你试图使用功能所在的网络位置)问题
- 计算机电脑用户名,如何改计算机用户名(administrator)
- uni-app快速上手顺序
- 基于Springboot+mybatis+mysql+html实现CRM智能办公系统
- LTE Cat-M1 物联网模块直接连接全球蜂窝网络
- ajax 模糊查询,ajax模糊查询api
- SpringBoot中全面接管SpringMVC
热门文章
- 计算机网络基础知识 帮助学习网络管理的初学者快速了解网络管理的初步结构知识...
- vue-cli 使用Mint-UI
- Jmeter分布式测试-远程调用
- Android扩大点击事件接收区域范围
- PHP5.3下加速器ZendGuardLoader安装及故障处理
- 根据中心点、半径长度和角度画点
- OpenSSH 服务器的 20 个最佳实践
- windows7下bcdedit出现“拒绝访问”解决办法
- 优秀的.NET Winform UI控件(标价$399):DotNetMagic Version 3.0 Released
- 本地socket通讯 -转