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

Tom*_*Tom 7 linux command-line-interface top

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

top -c -b -n 1 > top.log
Run Code Online (Sandbox Code Playgroud)

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

没有-c

2497 root      18   0 11264 5888 1524 S  0.0  0.1   0:03.31 miniserv.pl
Run Code Online (Sandbox Code Playgroud)

使用-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
Run Code Online (Sandbox Code Playgroud)

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

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

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

ps -eo pcpu,pmem,user,args | sort -r -k1 | head -n 10
Run Code Online (Sandbox Code Playgroud)

小智 6

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

$ COLUMNS=1000 top -c -b -n 1 > top.log
Run Code Online (Sandbox Code Playgroud)

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