Ps
如何使“ps”命令以 MB 而不是 KB 顯示記憶體?
Linux
ps
命令顯示不同的記憶體使用情況,例如 RSS(駐留集大小),預設大小以 kB 為單位。有沒有辦法像 MB 或 GB 一樣顯示ls -s --human-readable
?
AFAIK 你不能簡單地通過
ps
帶有選項的純命令來實現它。但是,您可以使用一些文本處理器,例如awk
並使其執行您想要的操作:ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}'
這從
ps
除第一行之外的每一行獲取結果,它通常在 KB 中替換第 5 列,到 MB 添加 M 後綴。您可以將其設為別名並將其儲存在*.bashrc*文件中,以便您可以通過 .bashrc 之類的方式呼叫它
myps
。大多數人都在問如何保留格式或使用其他單位和精度。
對於簡單版本,您可以使用
column -t
輸出過濾器:ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}' | column -t
但是,這不能正確辨識最後一列中的空格。不幸的是,我們必須處理文本格式並以類似格式準備我們自己的格式字元串
printf
。ps afu | awk 'NR==1 {o=$0; a=match($0,$11);}; NR>1 {o=$0;$5=int(10*$5/1024)/10"M";}{ printf "%-8s %6s %-5s %-5s %9s %9s %-8s %-4s %-6s %-5s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, substr(o, a);}'
解釋:
NR==1
條件僅適用於第一行(標題)。我們使用原始 ps 輸出來確定 COMMAND 的開始位置:
o=$0
儲存未修改的整行,以便我們以後使用a=match($0,$11)
找到第 11 個欄位的位置(這應該是 COMMAND 列在原始輸出中開始的位置)
NR>1
用於以下行(數據)。我們正在更改第 5 個欄位:
$5=int(10*$5/1024)/10"M"
將值更改為帶一位小數的兆字節並添加“M”後綴。printf 以類似列的方式顯示所有欄位:
%-10s
表示s
字元串,10
10 個字元寬,-
左對齊%8s
表示s
字元串,8
8 個字元寬,並且由於-
該欄位沒有輸出是右對齊的。
substr(o, a)
從先前條件計算的位置開始獲取原始行的子字元串(因此o
之前儲存)a
,因此我們可以顯示命令輸出並保留空格。