如何抑制top命令的一般信息

How to suppress the general information for top command

我想抑制top命令的一般信息 使用 top parameter.

一般信息是指以下内容:

top - 09:35:05 up  3:26,  2 users,  load average: 0.29, 0.22, 0.21
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.3%us,  0.7%sy,  0.0%ni, 96.3%id,  0.8%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3840932k total,  2687880k used,  1153052k free,    88380k buffers
Swap:  3998716k total,        0k used,  3998716k free,   987076k cached

不想做的是:

top -u user | grep process_name

top -bp $(pgrep process_name) | do_something

我怎样才能做到这一点?

注意:我在 Ubuntu 12.04 上,最高版本是 3.2.8。

它被称为 "Summary Area",我认为在 top 初始化时没有办法禁用它们。

但是当 top 是 运行 时,您可以通过按 ltm.

来自 man top

 Summary-Area-defaults
  'l' - Load Avg/Uptime  On  (thus program name)
  't' - Task/Cpu states  On  (1+1 lines, see '1')
  'm' - Mem/Swap usage   On  (2 lines worth)
  '1' - Single Cpu       On  (thus 1 line if smp)

这将转储输出,并且可以根据需要将其重定向到任何文件。

top -n1  |grep -Ev "Tasks:|Cpu(s):|Swap:|Mem:"

今天遇到这个问题。我有一个潜在的解决方案——当摘要区域被禁用时,从顶部的交互模式中创建一个顶部配置文件。由于这个文件在top以批处理模式启动时也会被读取,所以它会导致摘要区域在批处理模式下也被禁用。

按照以下步骤进行设置..

  1. 以交互模式启动顶部。

  2. 进入交互模式后,依次按 'l'、'm' 和 't'、

  3. 禁用摘要区域
  4. 按'W'(大写)写你的top配置文件(一般是~/.toprc)

  5. 退出交互模式。

现在,当您 运行 在批处理模式中置顶时,摘要区域将不会出现 (!)

更进一步...

如果您只在某些情况下需要这个并且大多数时候仍然需要摘要区域,您可以使用备用顶级配置文件。然而,据我所知,使用备用配置文件的方式有点古怪。有几种方法可以做到这一点。我使用的方法如下:

  1. 创建一个soft-link到顶层可执行文件。只要您对 link 的位置具有写入权限...

    就不必以 root 身份执行此操作
    ln -s /usr/bin/top /home/myusername/bin/omgwtf
    
  2. 通过键入 link ('omgwtf') 的名称而不是 'top' 来启动顶部。您将处于正常的顶部交互模式,但是当您保存配置文件时,它将写入 ~/.omgwtfrc,单独保留 ~/.toprc。

  3. 禁用摘要区域并像以前一样写入配置文件(按'l'、'm'、't'和'W')

将来,当您准备好在批处理模式下 运行 没有摘要信息的顶部时,您将必须通过您创建的 link 名称调用顶部。例如,

% omgwtf -usyslog -bn1
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
576 syslog    20   0  264496   8144   1352 S   0.0  0.1   0:03.66 rsyslogd
%

egrep 在这种情况下可能已经足够好了,但我要补充一点 perl -lane 可以以闪电般的速度完成这种事情:

top -b -n 1 | perl -lane '/PID/ and $x=1; $x and print' | head -n10

这样您可能会永远忘记 grep、sed、awk 等的精确参数,因为 perl 通常比那些工具快得多。

要监视特定进程,以下命令对我有用 -

top -sbn1 -p $(pidof <process_name>) | grep $(pidof <process_name>)

要获取所有进程信息,您可以使用以下命令 -

top -sbn1|sed -n '/PID/,/^$/p'

如果您 运行 top 处于批处理模式 (-b -n1),只需删除带有 sed:[=15= 的 header 行]

top -b -n1 | sed 1,7d

这将删除 top 输出的前 7 header 行,并且 returns 仅删除进程。

在 mac 上,您不能使用许多其他答案中使用的 -b

在那种情况下,命令将是 top -n1 -l1 | sed 1,10d

只抓取第一条进程线(及其header),只记录一次,而不是交互,然后抑制前 10 行的 top 命令的一般信息。