如何通过 /usr/bin/time 获取内存峰值使用情况?

如何通过 /usr/bin/time 获取内存峰值使用情况?

我正在使用usr/bin/time程序构建一个脚本来监视脚本的 RAM 使用情况并将其存储在变量中,以便我可以检查它是否高于指定的限制$mlimit,就像使用以下ls /命令的示例一样:

$mlimit=512000 #512mb limit in kilobytes

$musage=$(/usr/bin/time -f "%M" ls / | rev | cut -f 1 | rev)
echo "RAM usage: $musage"

/usr/bin/time在这种情况下,首先返回命令的输出,然后返回最大驻留集大小(RAM 使用情况)。我想然后我可以反转输出,剪切它以获得内存使用情况并将其反转回来。但我得到这个输出:RAM usage: binbin是命令返回的第一个目录ls /。所以我获取 RAM 使用情况的策略不起作用。

谢谢

答案1

GNUtime在 stderr 上输出资源使用信息,但可以被告知将其写入其他地方-o

{
  musage=$(command time -o /dev/fd/4 -f %M ls / 4>&1 >&3 3>&-)
} 3>&1

将记录变量中的最大内存使用量,同时保留ls“stdout”和“stderr”。

其工作原理是在命令替换之外将原始 fd 1 (stdout) 复制到 fd 3 3>&1,以便在命令替换内部,我们可以在命令替换管道在 fd 4 上可用后恢复lswith的原始 stdout。>&3

然后time通过 将其输出写入该管道/dev/fd/4,而lsstdout 是原始输出。

相关内容