supervisord
运行在 CentOS 服务器上。如果我做
ps -e -o %mem,%cpu,cmd | grep supervisord | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
我得到0 0
只是因为supervisord
它只是一个初始化守护进程。它在我的服务器上运行四个子进程:
# pgrep -P $(pgrep supervisord) | wc -l
4
如何在一行命令中找到这些子进程的 CPU 和内存使用情况汇总?
答案1
代码来自哈皮劳尔的回答,
pgrep -P $(pgrep supervisord) | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
将仅获得一个子层。
如果要搜索从主 pid 派生的所有进程,请使用以下代码:
ps -o pid,ppid,pgid,comm,%cpu,%mem -u {user name} | {grep PID_PRINCIPAL}
主进程的pid就是子进程的PGID。
答案2
给定一个pid
,
pid=24535
pstree -p $pid | grep -o '([0-9]\+)' | grep -o '[0-9]\+' |\
xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
# 15.5 905.2
我没能从 pgrep 获取所有子进程的 pid。
答案3
尝试使用xargs
:
pgrep -P $(pgrep supervisord) | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'