答案 0 :(得分:1)
我假设尺寸仅以kB为单位给出
#!/usr/env/bin bash
sum=0
grep "^Size:" /proc/pid/smaps | (while read line
do
size=$(echo "$line" | tr -s '\t' ' ' | cut -d' ' -f2)
sum=$((sum + size))
done
echo $sum) | xargs -I{} echo "total size: {} kB"
1-获取所有尺寸的行
grep "^Size:" /proc/pid/smaps
2-检索当前匹配线的有趣部分并在其上填充(在我们的例子中总结它)
while read line
do
size=$(echo "$line" | tr -s '\t' ' ' | cut -d' ' -f2)
sum=$((sum + size))
done
然后将其括在括号中echo
以取出while
语句的值
| (while read line
do
size=$(echo "$line" | tr -s '\t' ' ' | cut -d' ' -f2)
sum=$((sum + size))
done
echo $sum) |
3-现在管道中可以使用总大小,您可以使用它
xargs -I{} echo "total size: {} kB"
答案 1 :(得分:0)
#!/bin/bash
SUM=0
while read -r line
do
f=($line)
if [ "${f[0]}" == "Size:" ]
then
size=$(numfmt --from=iec --suffix=B "${f[1]}${f[2]^^}")
SUM=$(($SUM + ${size: : -1}))
fi
done < /proc/$$/smaps
echo "I have $(numfmt --to=iec $SUM) in /proc/$$/smaps!"
上面的脚本循环/proc/$$/smaps
按空格分割每一行,然后使用numfmt将Size
的任何值转换为字节。