Esta não é uma resposta completa, mas posso atualizá-la mais tarde.
O seguinte conjunto de uma linha, se colocado em um arquivo chamado cpu_usage_for_pid.sh
, aceitará um PID como um argumento e imprimirá a soma da porcentagem de uso da CPU desse PID e de todos os seus PIDs filhos.
#!/bin/bash
awk '{sum += $2} END{print sum}' <(ps -o pid,pcpu p "$(pstree -p "$1" | awk -F '[^0-9][^0-9]*' -v thepid="$1" 'NR = 1 {printf "%d", thepid} { for (i=1; i<=NF; i++) { if ($i != "") { printf ",%d", $i }}}')")
Neste momento, minha VM tem apenas 0% de uso para todos os processos, por isso é difícil testá-la. Mas você o executa como ./cpu_usage_for_pid.sh 1241
.
Este é um protótipo, não para uso em produção.
De A Arte da Programação Unix , que citou Mike Lesk:
...he'd lash together some combination of shell scripts and awk code that did roughly what was needed, tell the customers to send him some clerks for a few days, and then have the customers come in and look at their clerks using the prototype and tell him whether or not they liked it. If they did, he would say “you can have it industrial strength so-many-months from now at such-and-such cost”
:)