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

相关内容