/ / Comprobación del uso total de memoria en un script de bash que genera otros procesos: linux, bash, gestión de memoria

Comprobación del uso total de la memoria en un script bash que genera otros procesos: linux, bash, memory-management

Si tengo un script que llama a otros programas,¿Cómo verifico periódicamente el uso de memoria para el script? No puedo simplemente usar un bucle en pmap o ps usando el pid de la secuencia de comandos, ya que la secuencia de comandos genera otros procesos (que tendrán sus propios usos de memoria y pid).

¿Alguien sabe una manera ingeniosa de obtener el uso total de memoria de un script que tome en cuenta todos los procesos secundarios que el script generará también?

¡Gracias!

Respuestas

0 para la respuesta № 1

Si el proceso del niño no tiene su propio hijo, es bastante fácil:

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

De lo contrario, puede confiar en el ID del grupo de procesos (PGID), pero vale la pena asegurarse de que los programas a los que llama desde el script no configuren sus propios grupos de procesos.

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

Si todos los elementos secundarios de su script no pertenecen al mismo PGID, solo podemos recorrer los procesos de forma recursiva:

$ 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"

aquí $PID Es un PID de tu script. La salida es un tamaño de memoria virtual total en kilobytes.