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命令来做到每秒更新。
参考【易百教程】