如何从批处理模式下运行的“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 

问题是每行的输出被截断以适应当前的terminal窗口。 如果可以有一个宽的terminal,这是可以的,因为你有很多的输出,但是如果你的terminal只有165个字符的宽度,每个进程只能得到165个字符的信息,而且通常没有足够的字符来显示完整的进程命令。 当命令在没有terminal的情况下执行时,这是一个特别的问题,例如,如果你通过cron工作来执行命令。

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

这不是紧急的,因为有一个替代的方法来获得CPU使用sorting的前10个进程:

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

您可以将COLUMNS环境variables设置为较大的值。 例如,要将其设置为top调用:

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

至less它在Ubuntu 9.10上的bash 4.0.33中有效。