Linux ps命令

1. ps命令简介

  • Linux 中的 ps 命令是 Process Status 的缩写。ps 命令用来列出系统中 当前正在运行 的那些进程,就是执行 ps 命令的那个时刻的那些进程的快照。使用该命令可以确定有哪些进程 正在运行 和 运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。

  • ps 查看的结果不是动态连续的,如果想要动态的显示进程信息,就可以使用 top、htop 命令。

  • ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。

  • ps所有内容均可在以下网址查询:
    https://www.man7.org/linux/man-pages/man1/ps.1.html

2. ps命令参数

选项描述
-a显示所有终端机下执行的程序,除了阶段作业领导者之外。
a显示现行终端机下的所有程序,包括其他用户的程序。
-A显示所有程序。
-c显示CLS和PRI栏位。
c列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。
-C<指令名称>指定执行指令的名称,并列出该指令的程序的状况。
-d显示所有程序,但不包括阶段作业领导者的程序。
-e此选项的效果和指定"A"选项相同。
e列出程序时,显示每个程序所使用的环境变量。
-f显示UID,PPIP,C与STIME栏位。
f用ASCII字符显示树状结构,表达程序间的相互关系。
-g<群组名称>此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。
g显示现行终端机下的所有程序,包括群组领导者的程序。
-G<群组识别码>列出属于该群组的程序的状况,也可使用群组名称来指定。
h不显示标题列。
-H显示树状结构,表示程序间的相互关系。
-j或j采用工作控制的格式显示程序状况。
-l或l采用详细的格式来显示程序状况。
L列出栏位的相关信息。
-m或m显示所有的执行绪。
n以数字来表示USER和WCHAN栏位。
-N显示所有的程序,除了执行ps指令终端机下的程序之外。
-p<程序识别码>指定程序识别码,并列出该程序的状况。
p<程序识别码>此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。
r只列出现行终端机正在执行中的程序。
-s<阶段作业>指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。
s采用程序信号的格式显示程序状况。
S列出程序时,包括已中断的子程序资料。
-t<终端机编号>指定终端机编号,并列出属于该终端机的程序的状况。
t<终端机编号>此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。
-T显示现行终端机下的所有程序。
-u<用户识别码>此选项的效果和指定"-U"选项相同。
u以用户为主的格式来显示程序状况。
-U<用户识别码>列出属于该用户的程序的状况,也可使用用户名称来指定。
U<用户名称>列出属于该用户的程序的状况。
v采用虚拟内存的格式显示程序状况。
-V或V显示版本信息。
-w或w采用宽阔的格式来显示程序状况。
x显示所有程序,不以终端机来区分。
X采用旧式的Linux i386登陆格式显示程序状况。
-y配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。
-<程序识别码>此选项的效果和指定"p"选项相同。
–cols<每列字符数>设置每列的最大字符数。
–columns<每列字符数>此选项的效果和指定"–cols"选项相同。
–deselect此选项的效果和指定"-N"选项相同。
–forest此选项的效果和指定"f"选项相同。
–headers重复显示标题列。
–help在线帮助。
–info显示排错信息。
–lines<显示列数>设置显示画面的列数。
–no-headers此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。
–group<群组名称>此选项的效果和指定"-G"选项相同。
–Group<群组识别码>此选项的效果和指定"-G"选项相同。
–pid<程序识别码>此选项的效果和指定"-p"选项相同。
–rows<显示列数>此选项的效果和指定"–lines"选项相同。
–sid<阶段作业>此选项的效果和指定"-s"选项相同。
–tty<终端机编号>此选项的效果和指定"-t"选项相同。
–user<用户名称>此选项的效果和指定"-U"选项相同。
–User<用户识别码>此选项的效果和指定"-U"选项相同。
–version此选项的效果和指定"-V"选项相同。
–widty<每列字符数>此选项的效果和指定"-cols"选项相同。

3. Linux进程状态

ps进程状态

  • R运行状态(runing):并不意味着进程一定在运行中,也可以在运行队列里;
  • S睡眠状态(sleeping):进程在等待事件完成;(浅度睡眠,可以被唤醒)
  • D磁盘睡眠状态(Disk sleep):不可中断睡眠(深度睡眠,不可以被唤醒,通常在磁盘写入时发生)
  • T停止状态(stopped):可以通过发送SIGSTOP信号给进程来停止进程,可以发送SIGCONT信号让进程继续运行
  • X死亡状态(dead):该状态是返回状态,在任务列表中看不到;
  • Z僵尸状态(zombie):子进程退出,父进程还在运行,但是父进程没有读到子进程的退出状态,子进程进入僵尸状态;
  • t追踪停止状态(trancing stop)
  • W 进入内存交换(从内核2.6开始无效)

  • < 高优先级
  • N 低优先级
  • L 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O),即,有些页被锁进内存
  • s 包含子进程;即进程的领导者(在它之下有子进程);
  • + 位于后台的进程组;
  • l 多线程,克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

参考:
Linux进程状态解析 之 R、S、D、T、Z、X (主要有三个状态)
https://blog.csdn.net/wudebao5220150/article/details/12919453

4. ps命令三种语法格式

ps命令支持三种使用的语法格式

三种语法格式:

  • UNIX 风格,选项可以组合在一起,并且选项前必须有 “-” 连字符
  • BSD 风格,选项可以组合在一起,但是选项前不能有 “-” 连字符
  • GNU 风格的长选项,选项前有两个 “-” 连字符

能够混用这几种风格,但是可能会发生冲突。较多使用 UNIX 风格的 ps 命令。

5. ps常用指令

ps -ef #用标准格式显示所有当前进程
ps aux #显示所有当前进程
ps -ax #显示所有当前进程
ps -u pungki #根据用户过滤进程;如查询pungki用户的进程
ps aux --sort -pcpu | less # 根据 CPU 使用来对进程升序排序
ps aux| sort -rn -k 3|head # 根据 CPU 使用来对进程降序排序 (head默认是前10行)
ps aux| sort -rn -k 4|head # 根据 内存 使用来对进程降序排序
watch -n 3 'ps -ef|grep python'  # 每隔3秒显示python进程的变化情况
watch -n 3 -d 'ps -ef|grep python'  # 每隔3秒高亮显示python进程的变化情况
ps aux --sort -pmem | less #根据 内存使用 来升序排序
ps aux --sort -pcpu,+pmem | head -n 10 #查询全10个使用cpu和内存最高的应用
ps -C getty #通过进程名和PID过滤,比如想显示一个名为getty的进程的信息
ps -f -C getty #带格式显示的,通过进程名和PID过滤
ps -L 1213 #根据线程来过滤进程;可以使用-L 参数,后面加上特定进程的PID,查出特定进程的所有线程。
ps axjf(或pstree) #树形显示进程
ps -eo pid,user,args # 显示安全信息
ps -U root -u root u #格式化输出 root 用户(真实的或有效的UID)创建的进程
 

不要忘了通过 man ps来查看更多的参数

6. ps常见排序键

排序键列表
c cmd 可执行地简单名称
C cmdline 完整命令行
f flags 长模式标志
g pgrp 进程地组ID
G tpgid 控制tty进程组ID
j cutime 累计用户时间
J cstime 累计系统时间
k utime 用户时间
K stime 系统时间
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 内存大小(千字节)
S share 共享页地数量
t tty tty次要设备号
T start_time 进程启动地时间
U uid UID
u user 用户名
v vsize 总地虚拟内存数量(字节)
y priority 内核调度优先级

7. ps aux

# ps aux 

ps aux

各列的解释:

  • USER 进程的用户;
  • PID 进程的ID;
  • %CPU 进程占用的CPU百分比;
  • %MEM 占用内存的百分比;
  • VSZ 该进程使用的虚拟内存量(KB);
  • RSS 该进程占用的固定内存量(KB);
  • TTY 该进程在哪个终端上运行(登陆者的终端位置),若与终端无关, 则显示(?)。若为pts/0等,则表示由网络连接主机进程;
  • START 该进程被触发启动时间;
  • TIME 该进程实际使用CPU运行的时间;
  • COMMAND 命令的名称和参数;
STAT状态位常见的状态字符
D 无法中断的休眠状态(通常 IO 的进程);
R 正在运行可中在队列中可过行的;
S 处于休眠状态;
T 停止或被追踪;
W 进入内存交换 (从内核2.6开始无效);
X 死掉的进程  (基本很少见);
Z 僵尸进程;
< 优先级高的进程;
N 优先级较低的进程;
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ 位于后台的进程组;

参考:
https://blog.csdn.net/weixin_33906657/article/details/94677042

8. ps -ef

ps -ef
其中各列的内容意思如下:

  • UID //用户ID、但输出的是用户名
  • PID //进程的ID
  • PPID //父进程ID
  • C //进程占用CPU的百分比
  • STIME //进程启动到现在的时间
  • TTY //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
  • CMD //命令的名称和参数

9. ps axjf

ps axjf其中各列的内容意思如下:

  • PPID:父进程ID
  • PID:当前进程ID
  • PGID:当前进程的进程组ID
  • SID:会话ID
  • TTY:该进程在哪个终端下运作。( ?表示与终端机无关,例如守护进程; tty1-tty6是本机上的登录者进程; pts/0等表示网络连接进主机的进程)。
  • TPGID:前台进程组ID
  • STAT:该进程目前的状态
  • UID:用户ID
  • TIME:该进程实际使用CPU运作的时间
  • COMMAND:该进程的实际命令

9.1 PPID、PID、PGID、SID

Linux中,进程都拥有以下的ID

  • Process ID(PID)
    Linux中标识进程的一个数字,它的值是不确定的,是由系统分配的(但是有一个例外,启动阶段,kernel运行的第一个进程是init,它的PID是1,是所有进程的最原始的父进程),每个进程都有唯一PID,当进程退出运行之后,PID就会回收,可能之后创建的进程会分配这个PID
  • Parent Process ID(PPID)
    字面意思,父进程的PID
  • Process Group ID(PGID)
    PGID就是进程所属的Group的Leader的PID,如果PGID=PID,那么该进程是Group Leader
  • Session ID(SID)
    和PGID非常相似,SID就是进程所属的Session Leader的PID,如果SID==PID,那么该进程是session leader

Session和Group都是管理多个进程的方式,同一个Group的进程属于同一个Session,一个Session里可以包含多个Group。

意义:

  • group和session虽然都是进程的集合,但是他们的意义不同。fork出的子进程,会继承group和session(PGID和SID与父进程相同)
    session与终端相关(Control terminal),同一个终端启动的进程默认会在一个session里。例如图形界面的终端(比如GNOME按ctrl+atl+T呼出的命令行界面),都是虚拟终端(Virtual terminal),他们实质上只有一个终端在真正起作用,输入w命令,可以看到所有的control terminal。
  • group则是方便管理,比如发送信号,kill可以一次向一个group的进程发送同一个信号,ctrl+z进入后台、bg、fg都可以对一个group的进程起作用。比如ctrl+z可以将一个group的进程stop暂停运行,fg可以让一个group继续运行。

参考:
深入理解 Linux的进程,线程,PID,LWP,TID,TGID
https://www.linuxidc.com/Linux/2019-03/157819.htm

9.2 进程间关系(进程组、作业、会话、作业控制有关信号、终端)

https://blog.csdn.net/ZWE7616175/article/details/79979538

10. 格式化输出用户(真实的或有效的UID)创建的进程

ps -U root -u root u

ps -U root -u root u

  • -U 参数按真实用户ID(RUID)筛选进程,它会从用户列表中选择真实用户名或 ID。真实用户即实际创建该进程的用户。

  • -u 参数用来筛选有效用户ID(EUID)。

  • 最后的u参数用来决定以针对用户的格式输出,由User, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME 和 COMMAND这几列组成。

11. top命令

  • ps 命令可以一次性给出当前系统中进程状态,但使用此方式得到的信息缺乏时效性,并且,如果管理员需要实时监控进程运行情况,就必须不停地执行 ps 命令,这显然是缺乏效率的。

  • 为此,Linux 提供了 top 命令。top 命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。

  • top 命令的基本格式如下:

[root@localhost ~]#top [选项]

选项:
-d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;
-b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
-n 次数:指定 top 命令执行的次数。一般和"-"选项合用;
-p 进程PID:仅查看指定 ID 的进程;
-s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;
-u 用户名:只监听某个用户的进程;

在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:
? 或 h:显示交互模式的帮助;
P:按照 CPU
的使用率排序,默认就是此选项;
M:按照内存的使用率排序;
N:按照 PID 排序;
T:按照 CPU 的累积运算时间排序,也就是按照
TIME+ 项排序;
k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
r:按照 PID给某个进程重设优先级(Nice)值; q:退出 top 命令;

top命令解读:
在这里插入图片描述

  1. 第一行:
    10:01:23 — 当前系统时间
    126 days, 14:29 — 系统已经运行了126天14小时29分钟(在这期间没有重启过)
    2 users — 当前有2个用户登录系统
    load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

  1. 第二行:
    Tasks — 任务(进程),系统现在共有183个进程,其中处于运行中的有1个,182个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

  2. 第三行:cpu状态
    6.7% us — 用户空间占用CPU的百分比。
    0.4% sy — 内核空间占用CPU的百分比。
    0.0% ni — 改变过优先级的进程占用CPU的百分比
    92.9% id — 空闲CPU百分比
    0.0% wa — IO等待占用CPU的百分比
    0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
    0.0% si — 软中断(Software Interrupts)占用CPU的百分比

在这里CPU的使用比率和windows概念不同,如果你不理解用户空间和内核空间,需要充充电了。

  1. 第四行:内存状态
    8306544k total — 物理内存总量(8GB)
    7775876k used — 使用中的内存总量(7.7GB)
    530668k free — 空闲内存总量(530M)
    79236k buffers — 缓存的内存量 (79M)

  2. 第五行:swap交换分区
    2031608k total — 交换区总量(2GB)
    2556k used — 使用的交换区总量(2.5M)
    2029052k free — 空闲交换区总量(2GB)
    4231276k cached — 缓冲的交换区总量(4GB)

这里要说明的是不能用windows的内存概念理解这些数据,如果按windows的方式此台服务器“危矣”:8G的内存总量只剩下530M的可用内存。Linux的内存管理有其特殊性,复杂点需要一本书来说明,这里只是简单说点和我们传统概念(windows)的不同。

第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。

如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:530668+79236+4231276 = 4.7GB。

对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

  1. 第六行是空行

  2. 第七行以下:各进程(任务)的状态监控

  • PID — 进程id
  • USER — 进程所有者
  • PR — 进程优先级
  • NI — nice值。负值表示高优先级,正值表示低优先级
  • VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  • RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  • SHR — 共享内存大小,单位kb
    S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
  • %CPU — 上次更新到现在的CPU时间占用百分比
  • %MEM — 进程使用的物理内存百分比
  • TIME+ — 进程使用的CPU时间总计,单位1/100秒
  • COMMAND — 进程名称(命令名/命令行)
    如果COMMAND为[defunct],则代表僵尸进程,可kill -9杀掉

12. 杀进程

在Linux下kill进程时,发现程序又自动启动了,这有可能是父进程没kill掉导致的。
解决步骤:

    1. ps -aux 查找到对应进程pid号
    1. cd /proc/PID号
    1. cat status, 找到父进程的PPID号
    1. 先杀掉父进程

      kill -9 PPID号

    1. 再杀掉子进程

      kill -9 PID号

参考:

  • kill 和 pgrep 和 pidof 和 awk 和 pkill 和 killall
    https://blog.csdn.net/freeking101/article/details/53445749

  • ps命令详解
    https://blog.csdn.net/freeking101/article/details/53444530

  • Linux 中ps 和 top命令详解
    https://blog.csdn.net/timchen525/article/details/76364706

  • Linux ps命令
    https://blog.csdn.net/qq_27870421/article/details/91790800?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control

  • 10个重要的Linux ps命令实战
    https://linux.cn/article-4743-1.html

  • 进程和作业管理
    https://man.linuxde.net/sub/%E8%BF%9B%E7%A8%8B%E5%92%8C%E4%BD%9C%E4%B8%9A%E7%AE%A1%E7%90%86


加星
关注
点赞
谢谢
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值