![mac/linux 終端機 - 如何遞歸地找到進程及其所有子進程的總記憶體使用量?](https://rvso.com/image/1554902/mac%2Flinux%20%E7%B5%82%E7%AB%AF%E6%A9%9F%20-%20%E5%A6%82%E4%BD%95%E9%81%9E%E6%AD%B8%E5%9C%B0%E6%89%BE%E5%88%B0%E9%80%B2%E7%A8%8B%E5%8F%8A%E5%85%B6%E6%89%80%E6%9C%89%E5%AD%90%E9%80%B2%E7%A8%8B%E7%9A%84%E7%B8%BD%E8%A8%98%E6%86%B6%E9%AB%94%E4%BD%BF%E7%94%A8%E9%87%8F%EF%BC%9F.png)
我想知道一個進程及其子進程使用了多少記憶體。了解單一進程的使用有時並沒有什麼用處,例如,當您正在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