mac/linux 終端機 - 如何遞歸地找到進程及其所有子進程的總記憶體使用量?

mac/linux 終端機 - 如何遞歸地找到進程及其所有子進程的總記憶體使用量?

我想知道一個進程及其子進程使用了多少記憶體。了解單一進程的使用有時並沒有什麼用處,例如,當您正在tmux運行時,您想查看所有 bash 進程以及所有vim正在運行的內存有多少內存,等等 - 總結一下。

答案1

這應該可以回答你對 Linux 的問題,但不知道如何在 Mac 上做到這一點。

如果我執行“ps -ef”,如何顯示每個進程的記憶體使用情況?

這是他們用來完成此操作的腳本:

#!/bin/bash

for pid in $(ps -ef | awk '{print $2}'); do
    if [ -f /proc/$pid/smaps ]; then
        echo "* Mem usage for PID $pid"     
        rss=$(awk 'BEGIN {i=0} /^Rss/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        pss=$(awk 'BEGIN {i=0} /^Pss/ {i = i + $2 + 0.5} END {print i}' /proc/$pid/smaps)
        sc=$(awk 'BEGIN {i=0} /^Shared_Clean/ {i = i + $2} END {print i}' /proc/$pid/smaps)            
        sd=$(awk 'BEGIN {i=0} /^Shared_Dirty/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        pc=$(awk 'BEGIN {i=0} /^Private_Clean/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        pd=$(awk 'BEGIN {i=0} /^Private_Dirty/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        echo "-- Rss: $rss kB" 
        echo "-- Pss: $pss kB"
        echo "Shared Clean $sc kB"
        echo "Shared Dirty $sd kB"
        echo "Private $(($pd + $pc)) kB"
    fi
done

相關內容