Linux常见命令ps的运用(或许是最全的)

2020-12-03 10:30

阅读:3547

ps命令基本格式为:
ps [options]

常用参数

-A 显示所有进程(同-e)
-a 显示当前终端的所有进程
-u 显示进程的用户信息
-o 以用户自定义形式显示进程信息
-f 显示程序间的关系

ps字段含义

USER 进程所有者的用户名
PID 进程号
START 进程激活时间
%CPU 进程自最近一次刷新以来所占用的CPU时间和总时间的百分比
%MEM 进程使用内存的百分比
VSZ 进程使用的虚拟内存大小,以K为单位
RSS 驻留空间的大小。显示当前常驻内存的程序的K字节数。
TTY 进程相关的终端
STAT 进程状态,包括下面的状态:
D 不可中断 Uninterruptible sleep (usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核2.6开始无效)
X 死掉的进程
< 高优先级
N 低优先级
L 有些页被锁进内存
s 包含子进程
\+ 位于后台的进程组;
l 多线程,克隆线程
TIME 进程使用的总CPU时间
COMMAND 被执行的命令行
NI 进程的优先级值,较小的数字意味着占用较少的CPU时间
PRI 进程优先级。
PPID 父进程ID
WCHAN 进程等待的内核事件名

显示所有进程信息

ps -A
PID TTY TIME CMD
1 ? 00:00:03 systemd
2 ? 00:00:00 kthreadd

虽然能显示所有进程,但是显示的信息却不多,基本只显示了进程id和进程名,有时候并不实用。

显示所有进程基本信息 相关参数 -e

ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:52 ? 00:00:03 /sbin/init splash
root 2 0 0 10:52 ? 00:00:00 [kthreadd]

显示指定用户的进程
相关参数-u

ps -u root
PID TTY TIME CMD
1 ? 00:00:03 systemd
2 ? 00:00:00 kthreadd

查看指定进程名相关信息
这个时候就需要配合grep使用了。
例如,查看”java“相关进程:

ps -ef|grep java
root 2685 2684 2 10:55 pts/0 00:01:19 java -jar ./software/finalspeed/finalspeed_client.jar
root 5423 4487 0 11:55 pts/20 00:00:00 grep --color=auto java
查看进程占用内存,cpu利用率等信息
ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 185488 6188 ? Ss 10:52 0:03 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 10:52 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 10:52 0:00 [kworker/0:0H]

从上面的信息,可以看到进程的所有者、cpu占用率、内存占用率等较为详细的信息。

显示线程相关信息
相关参数-l

ps -elf

查看进程间的关系
相关参数-H,进程间关系以树形图的方式展示:

ps -ejH

查看进程的指定字段信息
有时候可能比较关注某些进程信息,ps -o可以指定要显示的列
例如:

ps -eo %cpu,%mem,vsz,rsz,start,stat,pid,sid,ni,uid,user,rss,time,command
.0 0.0 0 0 10:52:51 S 365 0 - 0 root 0 00:00:00 [irq/47-mei_me]
0.0 0.0 0 0 10:52:51 S< 373 0 -20 0 root 0 00:00:00 [cfg80211]
0.0 0.0 0 0 10:52:52 S< 402 0 -20 0 root 0 00:00:00 [ktpacpid]
0.0 0.0 0 0 10:52:56 S 669 0 0 0 root 0 00:00:00 [jbd2/sda15-8]

查看指定进程指定信息
只需要在最后指定–pid参数即可。
例如:

ps -o %cpu,%mem,vsz,rsz,start,stat,pid,sid,ni,uid,user,rss,time,command --pid 2685
%CPU %MEM VSZ RSZ STARTED STAT PID SID NI UID USER RSS TIME COMMAND
2.0 1.9 5740448 159796 10:55:24 Sl+ 2685 2583 0 1000 hyb 159796 00:01:46 java -jar ./software/finalspeed/finalspeed_client.jar

进程太多时分页显示
如果进程信息较多,可能一页无法完成显示,这时可以配合使用more命令
例如:

ps -aux|more



1.不加参数执行ps命令

结果默认会显示4列信息。

  • PID: 运行着的命令(CMD)的进程编号

  • TTY: 命令所运行的位置(终端)

  • TIME: 运行着的该命令所占用的CPU处理时间

  • CMD: 该进程所运行的命令

2. 显示所有当前进程

使用 -a 参数。-a 代表 all。同时加上x参数会显示没有控制终端的进程。

  1. ps -ax

这个命令的结果或许会很长。为了便于查看,可以结合less命令和管道来使用。

  1. ps -ax | less

3. 根据用户过滤进程

在需要查看特定用户进程的情况下,我们可以使用 -u 参数。比如我们要查看用户'pungki'的进程,可以通过下面的命令:

  1. ps -u pungki

4. 通过cpu和内存使用来过滤进程

也许你希望把结果按照 CPU 或者内存用量来筛选,这样你就找到哪个进程占用了你的资源。要做到这一点,我们可以使用 aux 参数,来显示全面的信息:

  1. ps -aux | less

当结果很长时,我们可以使用管道和less命令来筛选。

默认的结果集是未排好序的。可以通过 --sort命令来排序。

根据 CPU 使用来升序排序

  1. ps -aux --sort -pcpu | less

根据cpu使用排序

根据 内存使用 来升序排序

  1. ps -aux --sort -pmem | less

我们也可以将它们合并到一个命令,并通过管道显示前10个结果:

  1. ps -aux --sort -pcpu,+pmem | head -10

5. 通过进程名和PID过滤

使用 -C 参数,后面跟你要找的进程的名字。比如想显示一个名为getty的进程的信息,就可以使用下面的命令:

  1. ps -C getty

如果想要看到更多的细节,我们可以使用-f参数来查看格式化的信息列表:

  1. ps --C getty

通过进程名和PID过滤


6. 根据线程来过滤进程

如果我们想知道特定进程的线程,可以使用-L 参数,后面加上特定的PID。

  1. ps -1213

7. 树形显示进程

有时候我们希望以树形结构显示进程,可以使用 -axjf 参数。

  1. $ps -axjf

或者可以使用另一个命令。

  1. pstree


8. 显示安全信息

如果想要查看现在有谁登入了你的服务器。可以使用ps命令加上相关参数:

  1. ps -eo pid,user,args

参数 -e 显示所有进程信息,-o 参数控制输出。Pid,User 和 Args参数显示PID,运行应用的用户和该应用。

能够与-e 参数 一起使用的关键字是args, cmd, comm, command, fname, ucmd, ucomm, lstart, bsdstart 和 start。


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

系统管理员想要查看由root用户运行的进程和这个进程的其他相关信息时,可以通过下面的命令:

  1. 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这几列组成。

这里有上面的命令的输出结果:

show real and effective User ID


10. 使用PS实时监控进程状态

ps 命令会显示你系统当前的进程状态,但是这个结果是静态的。

当有一种情况,我们需要像上面第四点中提到的通过CPU和内存的使用率来筛选进程,并且我们希望结果能够每秒刷新一次。为此,我们可以将ps命令和watch命令结合起来。

  1. watch -1 ps -aux --sort -pmem, -pcpu

组合 ps 和 watch

如果输出太长,我们也可以限制它,比如前20条,我们可以使用head命令来做到。

  1. watch -1 ps -aux --sort -pmem, -pcpu | head 20

组合 ps 和 watch

这里的动态查看并不像top或者htop命令一样。但是使用ps的好处是你能够定义显示的字段,你能够选择你想查看的字段。

举个例子,如果你只需要看名为'pungki'用户的信息,你可以使用下面的命令:

  1. watch -1 ps -aux -U pungki u --sort -pmem, -pcpu | head 20




























评论


亲,登录后才可以留言!

热门文章

推荐文章

最新文章

置顶文章