将某个进程排除在‘top’列表之外

将某个进程排除在‘top’列表之外

是否可以排除某些进程的报告top

例如,我想将其自身从列表中排除(即,我不想top在进程列表中显示)。

我还希望能够排除不属于正在运行的用户的进程top(除了root)。

这可能吗?如果可以,怎么做?如果不行,有没有类似的工具可以做我想做的事情(不需要ps频繁运行类似的东西)。


我知道你可以通过使用-u-U选项来监控特定用户的进程,但这与监控不同仅有的正在运行的用户所拥有的进程top

答案1

Top 直接从 /proc 文件系统获取信息,该文件系统是 Linux 内核动态生成的“虚拟”文件系统。

因此,隐藏特定进程(例如其自身)只有在以下情况下才有可能:

  1. 你编写了一个劫持 /proc fs 的内核模块
  2. 你修改了顶层应用程序的源代码(用户级代码)

如果您想要完全控制可见的内容,您应该自己编写一个读取 /proc 的脚本/程序。

我建议你多探索一下 /proc。你可能只需要一个简单的 grep/cat/awk 脚本就能完成你想要的操作。

答案2

这个问题讨论得有点晚了,但有人可能会觉得它很有用。OP 只想查看当前用户的进程并top从结果中排除。可以使用 和 来执行该命令watch。例如:topgrep

watch -c -n 0.01 "top -b -U${USER} | grep -v -w -e top -e chrome -e libexec -e daemon -e csh"

可以轻松将要排除的其他词语添加到grep

也许ps输出比更受欢迎top,因为它可能执行得更快:

watch -c -n 0.01 "ps -aef | grep -w ${USER} | grep -v -w -e ps -e chrome -e libexec -e daemon -e csh"

不管怎样,这是一种不同的方法,既不需要修改 Linux 内核,也不需要修改top源代码。

编辑2024-03-05:这是一个简单的脚本,它将调用ps上面讨论的命令:

#!/bin/bash

#
# This is a simple wrapper for "watch"ing filtered "ps" output in an infinite loop. The ps table is too cluttered
# on a linux desktop -- this cleans it up according to a pre-defined FILTER.
#

FILTERED=(
 "-e ps"
 "-e chrome"
 "-e libexec"
 "-e daemon"
 "-e csh"
 "-e dbus"
 "-e gnome"
 "-e pulseaudio"
 "-e thunderbird"
 "-e ssh"
 "-e cat"
 "-e keybase"
 "-e slack"
 )

FILTER="grep -v -w ${FILTERED[@]}"

exec watch -c -n 0.01 "ps -aef | grep -w -e ${USER} -e PPID | ${FILTER}"

答案3

top | grep -v 在一定程度上可以实现这一点。但是随着 top 刷新,显示内容会重叠。

相关内容