如何查看子进程的cpu和内存使用情况

如何查看子进程的cpu和内存使用情况

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}'

相关内容