gpt4 book ai didi

linux - 检查产生其他进程的 bash 脚本中的总内存使用情况

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:32:43 25 4
gpt4 key购买 nike

如果我有一个调用其他程序的脚本,我该如何定期检查该脚本的内存使用情况?我不能只使用脚本的 pid 在 pmap 或 ps 上使用循环,因为脚本会生成其他进程(它们将有自己的 pid 和内存使用)。

有谁知道获取脚本总内存使用量的绝妙方法,该方法会考虑脚本生成的所有子进程?

谢谢!

最佳答案

如果子进程没有自己的子进程,那就很简单了:

$ ps h --ppid "$PID" -o vsz | awk '{ SUM+=$0 }; END { print SUM }'

否则您可能会依赖进程组 ID (PGID),但值得确保您从脚本调用的程序不会设置自己的进程组。

$ ps h -e -o pgid,vsz | awk -v "PGID=$PID" '$1==PGID { SUM+=$2 }; END { print SUM }'

如果您脚本的所有子脚本不属于同一个 PGID,我们只能递归地遍历进程:

$ cat ~/bin/vsztree

#!/bin/bash

declare -i VSZ_TOTAL

vsz() {
while read PID VSZ; do
VSZ_TOTAL+=$VSZ
vsz "$PID"
done < <(ps --ppid "$1" --format pid,vsz --no-headers)
}

vsz "$1"
echo $VSZ_TOTAL

$ vsztree "$PID"

此处 $PID 是您脚本的 PID。输出是以千字节为单位的总虚拟内存大小。

关于linux - 检查产生其他进程的 bash 脚本中的总内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24289045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com