7

我希望使用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。

4

7 回答 7

7

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

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

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

  2. 一旦进入交互模式,通过连续按“l”、“m”和“t”来禁用摘要区域。

  3. 按“W”(大写)写入您的顶级配置文件(通常为 ~/.toprc)

  4. 退出交互模式。

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

更进一步……

如果您只在某些情况下需要此功能,并且大部分时间仍需要摘要区域,则可以使用备用顶部配置文件。然而,AFAIK,使用备用配置文件的方法有点时髦。有几种方法可以做到这一点。我使用的方法如下:

  1. 创建指向顶部可执行文件的软链接。只要您对链接的位置具有写入权限,就不必以 root 身份执行此操作...

    ln -s /usr/bin/top /home/myusername/bin/omgwtf
    
  2. 通过键入链接名称 ('omgwtf') 而不是“top”来启动 top。您将处于正常的 top 交互模式,但是当您保存配置文件时,它将写入 ~/.omgwtfrc,而仅保留 ~/.toprc。

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

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

% 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
%
于 2017-05-27T00:58:53.563 回答
6

如果您top在批处理模式 ( -b -n1) 下运行,只需删除标题行sed

top -b -n1 | sed 1,7d

这将删除top仅输出和返回进程的前 7 个标题行。

于 2019-09-30T23:08:05.307 回答
4

它被称为“摘要区域”,我认为在top初始化时没有办法禁用它们。

但是在top运行时,您可以通过按l, t,来禁用它们m

来自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)
于 2016-05-03T04:15:40.560 回答
1

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

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

要获取所有流程信息,您可以使用以下内容 -

top -sbn1|sed -n '/PID/,/^$/p'
于 2018-08-11T20:51:22.890 回答
1

这将转储输出,如果需要,它可以重定向到任何文件。

top -n1  |grep -Ev "Tasks:|Cpu(s):|Swap:|Mem:"
于 2016-05-03T07:33:49.320 回答
0

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

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

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

于 2018-05-22T10:43:43.407 回答
0

在 Mac 上,您不能使用-b许多其他答案中使用的那个。

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

仅获取第一个进程行(及其标题),仅记录一次,而不是交互,然后抑制 top 命令的一般信息,即前 10 行。

于 2020-08-10T18:49:12.127 回答