Integrando “watch” com o registro “top” até terminar - COMO?

0

Eu tropecei neste link: " vigia "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. Eu quero registrar o processo "consumo de recursos" usando o topo.

Basicamente top -p PID -b >> LOGFILE .

Eu quero que isso seja executado em incrementos, digamos a cada 5 segundos usando o comando "watch"

watch -n 5

De um programa independente / externo, eu adicionarei "We Are Finished" ao arquivo de log.

Eu quero que o registro de watch / top seja interrompido / encerrado quando "We Are Finished" Então, grep deve estar avaliando todo o arquivo de log, não apenas o valor atual.

Eu quero que o comando seja executado de forma não bloqueante ... talvez termine com " & "

Eu defini -d para 5, então top e watch estão criando ao mesmo tempo? ...

Aqui está minha tentativa usando 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\"" &
    
por mshaffer 26.01.2017 / 16:43

1 resposta

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

Se você deseja sair do registro em um processo quando o pid não está mais sendo executado, o script abaixo deve funcionar? (isso evita que dois processos gravem no mesmo arquivo?)

São necessários três parâmetros: o PID, a localização do LOGFILE e o TIME entre as entradas do 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
    
por 28.01.2017 / 12:47