Linux

如何使用 /usr/bin/time 僅獲得記憶體峰值使用率?

  • June 21, 2021

我正在使用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 使用率的策略不起作用。

謝謝

GNUtime在 stderr 上輸出資源使用資訊,但可以告訴它在別處用-o

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

將在變數中記錄最大記憶體使用量,同時ls單獨保留 ‘stdout 和 stderr。

通過在命令替換 with 之外將原始 fd 1 (stdout) 複製到 fd 3 來工作3>&1,這樣在命令替換中,我們可以在 fd 4 上提供命令替換管道後恢復原始 stdout for lswith 。>&3

然後time通過 將其輸出寫入該管道/dev/fd/4,而lsstdout 是原始的。

引用自:https://unix.stackexchange.com/questions/654803