在top命令中使用关键字过滤进程

Linuxtop 命令行实用程序显示有关当前活动进程和系统资源的信息。实时查看 Linux 系统正在做什么,可以更轻松地找到使用大量资源的进程或简单地监视负载。例如,我们可以使用top来监控系统或特定进程的运行时间、内存使用情况、CPU负载等信息。

在本教程中,我们将了解如何在 Linux 中使用 top 命令根据进程名称进行关键字过滤过滤进程。

1. 使用内置功能过滤

打开终端,连接上服务器后,使用 top 命令后,大概长这样:

$ top

PID  USER  PR NI VIRT  RES  SHR  S  %CPU   %MEM     TIME+   COMMAND
16   root  20 0   0     0    0   R   81.7  0.0    15:53.89  kworker+
1352 root  20 0  7224  1316 704  S   1.0   0.5     0:09.76  Xorg
1373 root -51 0   0     0    0   S   0.7   0.0     0:03.50  irq/132+

现在,让我们按键盘 O 键,这会弹出一个提示,要求我们输入要过滤的字段和值。我们需要过滤的字段是 COMMAND ,而值应该是 nginx 。用等号连接这些字符串,我们筛选出 nginx 过滤器变为 COMMAND=nginx

...
add filter #1 (ignoring case) as: [!]FLD?VAL COMMAND=nginx

最后, top 命令现在应该只显示 nginx 进程的统计信息:

top - 11:14:22 up 388 days, 19:11,  1 user,  load average: 0.02, 0.06, 0.07
Tasks:  96 total,   1 running,  95 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.7 us,  0.3 sy,  0.0 ni, 97.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1883564 total,   121584 free,   779648 used,   982332 buff/cache
KiB Swap:  1049596 total,  1049596 free,        0 used.   729816 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 9993 www       20   0  144396  36028   2988 S  0.0  1.9   0:01.11 nginx
 9994 www       20   0  129932   6684    740 S  0.0  0.4   0:00.00 nginx
14565 root      20   0  129932   8116   2388 S  0.0  0.4   0:07.38 nginx

可以展示多个服务过滤条件的进程。

2. 使用组合命令实现过滤

可以将 top 命令的 -p 指定进程ID功能和 pgrep 命令结合,获取与关键词 nginx 匹配的目标进程进程监控:

top -c -p $(pgrep -d',' -f nginx)

也能得到想要的结果:

top - 11:24:10 up 388 days, 19:21,  1 user,  load average: 0.15, 0.09, 0.08
Tasks:   3 total,   0 running,   3 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.7 us,  1.0 sy,  0.0 ni, 95.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1883564 total,   100504 free,   792984 used,   990076 buff/cache
KiB Swap:  1049596 total,  1049596 free,        0 used.   713956 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 9993 www       20   0  144396  34912   3012 S  0.0  1.9   0:01.35 nginx: worker process
 9994 www       20   0  129932   6684    740 S  0.0  0.4   0:00.01 nginx: cache manager process
14565 root      20   0  129932   8116   2388 S  0.0  0.4   0:07.38 nginx: master process

但是,当我们重新启动一个进程时,它的 PID 会发生变化。因此, top 命令需要重新启动以检索目标进程 PID 的完整列表。为了解决这个问题,我们可以使用一个脚本,按照进程名过滤 top 命令的结果。例如,可以考虑使用下面的 shell 脚本 。

3. 使用shell脚本实时监听

写一个 shell 脚本,我这里命名为 my_top.sh

#!/bin/bash
__process_name=$1
while (true)
do
  clear
  __arg=$(pgrep -d',' -f $__process_name)
  if [ -z "$__arg" ]; then
    top -c | head -n 5
  else
    top -c -n 1 -p $__arg
  fi
  sleep 5
done

解析一下这个脚本,从参数中获取到进程名称,然后使用pgrep -f 去匹配进程ID,如果匹配到,则指定进程ID监听,如果没有,则只显示上面的5行信息也就是服务器负载相关的信息而没有进程;

重要的是,这个脚本每5秒重新获取一次进程ID,这样,当进程重启之后,进程ID改变,脚本还是会实现监听而不需要强制退出后重新匹配。

标题:在top命令中使用关键字过滤进程

原文链接:https://beltxman.com/3904.html

若无特殊说明本站内容为 行星带 原创,未经同意请勿转载。

发表评论

您的电子邮箱地址不会被公开。

Scroll to top