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

関連情報