Estou executando um processo e contando o número de threads com
ps huH p <PID_OF_U_PROCESS> | wc -l
Posso executar este tópico watch
assim;
watch -n 1 ps huH p <PID_OF_U_PROCESS> | wc -l
Isso exibirá o número de threads que o processo está executando, mas geralmente esse número não muda.
Como posso imprimir o novo número na tela apenas se ele mudou desde a última vez que o comando foi executado?
Por exemplo:
64 65 64
(alguns minutos se passam)
65
Etc.
Responder1
Você poderia simplesmente canalizar para uniq
:
while ps -o nlwp= -p "$pid"; do sleep 1; done | uniq
Responder2
watch
não é capaz de fazer isso diretamente. Embora você possa destacar diferenças na saída do comando (via option -d
) ou sair quando a saída muda (via option -g
) não é possível exibir a saída de mais de uma execução. Mas você pode conseguir isso por meio de outras ferramentas comuns.
Uma das muitas soluções possíveis:
last=""; while true; do cur="$(ps h -o nlwp -p <PID>)"; if ! [ "$cur" = "$last" ]; then last="$cur"; echo "$(date) $cur"; fi; sleep 1; done
Ou mais legível:
last=""
while true
do
cur="$(ps h -o nlwp -p <PID>)"
if ! [ "$cur" = "$last" ]
then
last="$cur"
echo "$(date) $cur"
fi
sleep 1
done
Explicação: A ps
opção -o nlwp
imprime diretamente o número de threads, então você não precisa chamar wc -l
. Você também pode usar $(pidof programname)
em vez de <PID>
para determinar o ID do processo automaticamente. Também adicionei a data atual, $(date)
que me parece útil. Se você não gostar, basta removê-lo.