以批处理模式指定顶部的屏幕宽度

以批处理模式指定顶部的屏幕宽度

我正在记录输出:top -b -n1 -c以便我可以跟踪哪些进程每分钟使用了多少内存和 CPU。当 top 显示完整命令行 ( -c) 时,命令行文本会在屏幕边缘被截断。这在终端中运行和显示时非常完美。但是,我正在将 STDOUT 发送到文件以供稍后解析,并希望记录完整的命令名称。有没有办法可以告诉 top 使用特定的屏幕宽度?(我知道它的最大宽度为 512,这样就没问题了)

有没有更好的方法来实现类似的目标:获取哪些进程正在运行以及它们消耗了多少资源的定期统计数据?

答案1

这似乎有效:

COLUMNS=512 top -b -n1 -c

不过,这似乎用空格填充了 512 列的行,至少在输出通过管道传输到另一个程序时是这样,因此您可能需要像这样过滤输出:

COLUMNS=512 top -b -n1 -c | sed 's/  *$//'

其中星号前面有两个空格字符。

答案2

我猜top其实不应该这样用,你应该使用ps

$ ps axv
PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
   1 ?        Ss     0:07    314    31  3908    24  0.0 init [3]  
   2 ?        S      0:00      0     0     0     0  0.0 [kthreadd]
   3 ?        S      0:06      0     0     0     0  0.0 [ksoftirqd/0]
   4 ?        S      0:12      0     0     0     0  0.0 [migration/0]
   5 ?        S      0:10      0     0     0     0  0.0 [migration/1]
   6 ?        S      0:05      0     0     0     0  0.0 [ksoftirqd/1]
....

请参阅man 1 ps查看详细的选项列表。

相关内容