arriba ¿Cómo monitorear procesos usando el nombre de expresión regular?

arriba ¿Cómo monitorear procesos usando el nombre de expresión regular?

Superviso varios procesos con, por ejemplo, '#top -p 22055,21995', pero hay muchos de ellos que comienzan con fwk*, es decir, fwk3_dev, fwk5_dev.

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                        
22055 admin      0 -20  832m 302m  41m S   20  2.5  14973:53 fwk3_dev                                                                                       
21995 admin      0 -20  834m 304m  41m S   14  2.6  10179:55 fwk5_dev 

¿Cómo puedo monitorear usando el nombre de expresión regular del proceso fwk*? Me refiero a todos los procesos que comienzan desde 'fwk'.

Respuesta1

topno hará esto por sí solo, pero podría escribir un script de shell simple que se ejecute topen modo por lotes (la -bopción), filtrandoesousando grep y en un bucle. No sería interactivo.

Por ejemplo

while :; do clear; top -b -n 1 |grep ' fwk' ;sleep 1; done

grepreconoce expresiones regulares, si se le da la -Eopción. Pero su ejemplo se puede manejar simplemente con un espacio en blanco al principio y "fwk" (a menos que tenga un usuario con el mismo nombre).

Algunas versiones detopEs posible que necesite una opción diferente (como -d) para ejecutarse solo una vez en modo por lotes.

Respuesta2

# first generate a comma-separated list of matching PIDs
pids=$(ps a -o pid,args | awk '/[f]wk/ {print $1}' | xargs | sed -e 's/ /,/g')
# then run top with that list
top -p $pids

NOTA: si fwk*se inicia algún proceso en el corto tiempo entre la generación de la lista y su ejecución top, no se incluirá en la pantalla.

información relacionada