
Me deparei com este link:"observe" a saída de um comando até que uma string específica seja observada e então saia
Eu conheço o PID do processo. Quero registrar o processo de "consumo de recursos" usando top.
Basicamente top -p PID -b >> LOGFILE
.
Quero que isso seja executado em incrementos, digamos, a cada 5 segundos, usando o comando "watch"
watch -n 5
De um programa independente/externo, acrescentarei "We Are Finished" ao arquivo de log.
Quero que o registro de watch/top seja interrompido/sair quando "Terminarmos". Portanto, grep
devemos avaliar todo o arquivo de log, não apenas o valor atual.
Quero que o comando seja executado de forma não bloqueadora... talvez termine com " &
"
Eu configurei -d para 5 para que top e watch estejam criando ao mesmo tempo? ...
Aqui está minha tentativa de usar a opção "-e" sugerida no link acima, não funcionando como esperado... PID e LOGFILE são valores apropriados.
watch -n 5 -e "! top -d 5 -b -p PID >> LOGFILE | grep -m 1 \"We Are Finished\"" &
Responder1
until grep -qm 1 '\"We Are Finished\"' LOGFILE; do top -d 5 -n 12 -b -p PID >> LOGFILE; done
Se você quiser sair do log em um processo quando o pid não estiver mais em execução, o script abaixo deve funcionar? (isso evita dois processos gravando no mesmo arquivo?)
São necessários três parâmetros: o PID, a localização do LOGFILE e o TEMPO entre as entradas do log.
#!/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