如何更改以批处理模式运行的“top”linux 命令的输出行长度

如何更改以批处理模式运行的“top”linux 命令的输出行长度

以下命令可用于捕获当前占用最多 CPU 的进程并存储到文件中:

top -c -b -n 1 > top.log

-c标志特别有用,因为它为您提供每个进程的命令行参数,而不仅仅是进程名称。

没有-c

2497 root      18   0 11264 5888 1524 S  0.0  0.1   0:03.31 miniserv.pl

使用-c(附加有用的命令信息):

2497 root      18   0 11264 5888 1524 S  0.0  0.1   0:03.31 /usr/bin/perl /usr/libexec/webmin/miniserv.pl /etc/webmin/miniserv.conf

问题是,每行输出都会被截断以适合当前终端窗口。如果您有一个宽终端,这没问题,因为您有大量输出,但如果您的终端只有 165 个字符宽,则每个进程只能获得 165 个字符的信息,并且通常没有足够的字符来显示完整的进程命令。当命令在没有终端的情况下执行时,这是一个特别的问题,例如如果您通过 cron 作业执行命令。

有人知道如何停止top截断数据或强制top每行显示一定数量的字符吗?

这并不紧急,因为还有另一种方法可以获取按 CPU 使用率排序的前 10 个进程:

ps -eo pcpu,pmem,user,args | sort -r -k1 | head -n 10

答案1

您可以将COLUMNS环境变量设置为较大的值。例如,仅为top调用设置它:

$ COLUMNS=1000 top -c -b -n 1 > top.log

至少它可以在 Ubuntu 9.10 上的 bash 4.0.33 中运行。

答案2

但有一个更好的解决方案,告诉top使用宽度,而不管终端。

top -w 512 -cbn 1其中-w可以使用的宽度是。

man top

-w :Output-width-override 为:-w [number]
在批处理模式下,如果不使用参数,top 将使用 COLUMNS= 和 LINES= 环境变量(如果已设置)格式化输出。否则,宽度将固定在最大 512 列。使用参数时,输出宽度可以减少或增加(最多 512),但行数被视为不受限制。

相关内容