Ps

如何使“ps”命令以 MB 而不是 KB 顯示記憶體?

  • July 5, 2021

Linuxps命令顯示不同的記憶體使用情況,例如 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字元串,1010 個字元寬,-左對齊
      • %8s表示s字元串,88 個字元寬,並且由於-該欄位沒有輸出是右對齊的。
    • substr(o, a)從先前條件計算的位置開始獲取原始行的子字元串(因此o之前儲存)a,因此我們可以顯示命令輸出並保留空格。

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