Integrar "ver" con el registro "superior" hasta terminar: ¿CÓMO?

Integrar "ver" con el registro "superior" hasta terminar: ¿CÓMO?

Me encontré con este enlace:"observar" la salida de un comando hasta que se observe una cadena en particular y luego salir

Conozco el PID del proceso. Quiero registrar el proceso de "consumo de recursos" usando top.

Básicamente top -p PID -b >> LOGFILE.

Quiero que esto se ejecute en incrementos, digamos cada 5 segundos usando el comando "ver"

watch -n 5

Desde un programa independiente/externo, agregaré "Hemos terminado" al archivo de registro.

Quiero que el registro de watch/top se interrumpa/salga cuando "Hemos terminado". Por lo tanto, grepdebería evaluar todo el archivo de registro, no solo el valor actual.

Quiero que el comando se ejecute en forma sin bloqueo... tal vez termine con " &"

Configuré -d en 5 para que top y watch estén creando al mismo tiempo. ...

Aquí está mi intento de usar la opción "-e" sugerida en el enlace anterior, pero no funciona como se esperaba... PID y LOGFILE son valores apropiados.

watch -n 5 -e "!  top -d 5 -b -p PID >> LOGFILE | grep -m 1 \"We Are Finished\"" &

Respuesta1

until grep -qm 1 '\"We Are Finished\"' LOGFILE; do top -d 5 -n 12 -b -p PID >> LOGFILE; done

Si desea salir del registro en un proceso cuando el pid ya no se está ejecutando, ¿el siguiente script debería funcionar? (¿Esto evita que dos procesos escriban en el mismo archivo?)

Se necesitan tres parámetros: el PID, la ubicación de LOGFILE y el TIEMPO entre entradas de registro.


#!/bin/bash

if [ $# -lt 3 ]
  then
    echo "Usage logpid (PID) (LOGFILE) (Time between in sec)"
    exit 1;
fi

while :
    do 
    if  ps -p $1 > /dev/null ; then
    top -n 1 -b -p $1 >> $2;
    else
    echo "Exited No pid";
    break;
    fi
    sleep $3;   
done

información relacionada