以下命令可用于捕获当前占用最多 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),但行数被视为不受限制。