ps命令

ps(Process Status)命令主要用来显示Linux进程信息,进程信息主要包括进程用户、pid、内存、cpu、启动时间、路径、终端等。ps命令列出的是当前进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令-性能分析常用命令

Linux上进程的状态

进程的状态:

  • R 运行 runnable (on run queue) ,正在运行或在运行队列中等待)。
  • S 中断 sleeping,休眠中, 受阻, 在等待某个条件的形成或接受到信号。
  • D 不可中断 uninterruptible sleep (usually IO),收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  • Z 僵死 a defunct (”zombie”) process,进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
  • T 停止 traced or stopped ,进程收到SIGSTOP,SIGSTP,SIGTIN,SIGTOU信号后停止运行运行。
参数说明
a显示所有进程
-a显示一个终端的所有进程,除了会话引线
-A显示所有进程,等同于-e
-m显示所有的线程
-o用户自定义格式
c显示进程的真实名称
-e显示所有进程,等于“-A”
e显示环境变量
f显示程序间的关系
-H显示树状结构
r显示当前终端的进程
T显示与此终端关联的所有进程。等同于 t (不带任何参数)
u指定用户的所有进程
-au显示较详细的资讯
-aux显示所有包含其他使用者的行程
-C<命令>列出指定命令的状况
–lines<行数>每页显示的行数
–width<字符数>每页显示的字符数
–help显示帮助信息
–version显示版本显示

ps命令主要用途

查看进程有没有启动
查看进程的pid并使用kill命令杀掉
查看哪些进程占用的cpu高
查看哪些进程占用内存高
查看进程的状态

ps命令,有两种形式一种是Linux形式(ps -ef),一种是unix形式(ps aux),两种效果一样,aux结果展示更直观。

# 查看系统中所有进程,使用BSD操作系统格式
ps aux
选项:
a:显示一个终端的所有进程,除了会话引线
u:显示进程的归属用户及内存的使用情况
x:显示没有控制终端的进程
ps aux

在这里插入图片描述

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

  • USER:该进程是由哪个用户产生的;
  • PID:进程的ID号;
  • %CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源;
  • %MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源;
  • VSZ:该进程占用虚拟内存的大小,单位KB;
  • RSS:该进程占用实际物理内存的大小,单位KB;
  • TTY:该进程是在哪个终端中运行的。其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端(现在不止256个)。?表示内核启动的
  • STAT:进程状态。常见的状态有R运行,S睡眠,T停止状态,s包含子进程,+位于后台
  • START:该进程的启动时间
  • TIME:该进程占用CPU的运算时间,注意不是系统时间
  • COMMAND:产生此进程的命令名
# 按cpu使用率降序显示
ps -aux --sort -pcpu

# 按内存使用率降序显示
ps -aux --sort -pmem

# 找出消耗内存最多的前10名进程
ps -aux --sort -pcpu | head -10

在这里插入图片描述

常用的是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。

# 查看指定进程pid(sshd)
ps -aux | grep sshd

实际上,我们也能经常看到ps -ef | grep java,那么这两者什么时候用呢?

ps -ef 和ps -aux使用

如果想跟踪cpu占用率和内存占用率, 用aux;如果想跟踪父进程和完整的启动命令,那么使用ef。

查找指定进程

ps -ef | grep 进程名/PID

ps命令将某个进程显示出来,中间的 | 是管道命令,是指ps命令与grep命令同时进行。
grep是查找,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。rep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

# 查看系统中所有进程,使用Linux标准命令格式
ps -le
选项:
-l:长格式显示。显示更加详细的信息
-e:显示所有进程,和-a作用一致
最常使用的就是ps -ef | grep 进程,查看当前系统的进程状态

以下这条命令是检查java 进程是否存在:

ps -ef | grep java
root     29670 16446  0 01:11 pts/2    00:00:00 grep --color=auto java

[root@10 ~]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 5月20 ?       00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2     0  0 5月20 ?       00:00:00 [kthreadd]
root         4     2  0 5月20 ?       00:00:00 [kworker/0:0H]
root         6     2  0 5月20 ?       00:00:01 [ksoftirqd/0]
root         7     2  0 5月20 ?       00:00:01 [migration/0]
......

字段含义如下:

  • UID:用户ID(User ID)
  • PID:进程ID(Process ID)
  • PPID:父进程的进程ID(Parent Process id)
  • C:CPU使用的资源百分比(CPU用户计算执行优先级的因子,数值越大CPU密集运算执行优先级越低)
  • STIME :启动时间
  • TTY:与进程关联的终端(tty)(完整的终端名称)
  • TIME:进程使用的总cpu时间
  • CMD:正在执行的命令行命令

实例

1.可以用 | 管道和 more 连接起来分页查看命令:

ps -aux |more

在这里插入图片描述

2.把所有进程显示出来,并输出到ps001.txt文件命令:

ps -aux > ps001.txt

3.输出指定的字段命令:

ps -o pid,ppid,pgrp,session,tpgid,comm

在这里插入图片描述

实例

ps -aux默认是无序的,可以通过–sort命令来排序,如:按照cpu占用来降序排序:

ps -aux --sort -pcpu|less -N     #按照cpu占用来排序
ps -aux --sort -pmem|less -N     #按照内存占用来排序
# 查看进程的pid、启动时间、运行时间
ps -eo pid,lstart,etime | grep [ pid ]

# 假如我们使用top命令看到PID为3356的进程占用CPU太高,那么,就可以使用以下命令来定位是哪些线程
ps -mp 3356 -o THREAD,tid,time | more  

使用ps命令实时查看进程
  ps 命令会显示你系统当前的进程状态,但是这个结果是静态的。如果我们想要使用ps命令来实时查看进程状态,并且通过CPU和内存用量来对结果进行排序,并且希望结果能够每秒刷新1次,我们可以把ps命令和watch命令结合起来使用。

watch -n 1 'ps -aux --sort -pcpu,+pmem | head -6'

解释一下这个命令:该命令每秒刷新1次,ps -aux会显示所有的进程,–sort -pcpu,+pmem 会使用CPU、内存来排序,head -6会显示前6行数据,即只看前5个进程情况,通过watch命令来做到每秒更新。

参考【易百教程】

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐