如何透過 /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 是原始輸出。

相關內容