为什么通过管道传输命令时“slabtop -o”仅返回前 23 行?

为什么通过管道传输命令时“slabtop -o”仅返回前 23 行?

我试图解析slabtop -owith awk 的输出来计算缓存大小的总和,但是当输出通过管道传输时,它只返回前 23 行。我在 Ubuntu 和 Centos 上尝试过这个。

# slabtop --version
slabtop from procps-ng 3.3.10
# slabtop -o | wc -l
23

为什么当命令通过管道传输时它只返回前 23 行?

答案1

slabtop, 即使-o总是将自己限制为一屏输出。它通常通过询问终端它的大小是多少来实现这一点,但是当它的标准输出不是终端时,假设屏幕为 80 列 x 24 行并且仅输出 23 行(以避免任何滚动)。

由于已经修复,该修复出现在procps-ng3.3.13 及更高版本中。

答案2

当输出不是终端时,它只是硬编码以这种方式工作。

如果您仍然想使用重定向并获取更多行,您可以使用scriptto 欺骗slabtop认为它的输出正在打印到终端。您可以stty在此基础上添加更改伪终端参数并设置您自己的输出线限制。

# slabtop -o | wc -l
23
# script -q -c "slabtop -o" /dev/null | wc -l
46
# script -q -c "stty rows 999; slabtop -o" /dev/null | wc -l
147

或者,您可以直接从/proc/slabinfo文件中获取信息,该文件slabtop本身也可以使用。

相关内容