Linux
如何使用 /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: bin
。bin
是命令返回的第一個目錄ls /
。因此,我獲取 RAM 使用率的策略不起作用。謝謝
GNU
time
在 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 forls
with 。>&3
然後
time
通過 將其輸出寫入該管道/dev/fd/4
,而ls
stdout 是原始的。