
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, grep
deberí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