Mac-/Linux-Terminal – Wie ermitteln Sie rekursiv die gesamte Speichernutzung eines Prozesses und aller seiner untergeordneten Prozesse?

Mac-/Linux-Terminal – Wie ermitteln Sie rekursiv die gesamte Speichernutzung eines Prozesses und aller seiner untergeordneten Prozesse?

Ich möchte herausfinden, wie viel Speicher ein Prozess und seine untergeordneten Prozesse verwenden. Manchmal ist es nicht hilfreich, die Speichernutzung eines einzelnen Prozesses zu kennen, z. B. wenn Sie einen tmuxlaufenden Prozess haben und wissen möchten, wie viel Speicher alle Bash-Prozesse plus alle vimlaufenden S usw. zusammengerechnet haben.

Antwort1

Dies sollte Ihre Frage für Linux beantworten, aber ich weiß nicht, wie das auf einem Mac geht.

Wie kann ich die Speichernutzung jedes Prozesses anzeigen, wenn ich „ps -ef“ ausführe?

Hier ist das Skript, das sie hierfür verwendet haben:

#!/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

verwandte Informationen