阅读/ proc / pid / smaps

时间:2016-10-24 16:29:05

标签: bash file proc

我正在尝试使用bash在smap文件中获取具有相同名称的行的值,但我不知道该怎么做。 例如,我需要获取以“Size:”int开头的每一行的值以获得总大小。 最好的方法是什么?

smap文件示例:

enter image description here

2 个答案:

答案 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按空格分割每一行,然后使用numfmtSize的任何值转换为字节。