Estoy ejecutando un proceso y estoy contando el número de hilos con
ps huH p <PID_OF_U_PROCESS> | wc -l
Puedo ejecutar este hilo watch
así;
watch -n 1 ps huH p <PID_OF_U_PROCESS> | wc -l
Esto generará la cantidad de subprocesos que el proceso está ejecutando, pero generalmente ese número no cambia.
¿Cómo puedo imprimir solo el nuevo número en la pantalla si cambió desde la última vez que se ejecutó el comando?
Por ejemplo:
64 65 64
(pasan unos minutos)
65
Etc.
Respuesta1
Podrías simplemente conectarte a uniq
:
while ps -o nlwp= -p "$pid"; do sleep 1; done | uniq
Respuesta2
watch
no es capaz de hacer esto directamente. Aunque puede resaltar las diferencias en la salida del comando (mediante la opción -d
) o salir cuando la salida cambia (mediante la opción -g
), no es posible mostrar la salida de más de una ejecución. Pero puedes lograrlo a través de otras herramientas comunes.
Una de las muchas soluciones posibles:
last=""; while true; do cur="$(ps h -o nlwp -p <PID>)"; if ! [ "$cur" = "$last" ]; then last="$cur"; echo "$(date) $cur"; fi; sleep 1; done
O más legible:
last=""
while true
do
cur="$(ps h -o nlwp -p <PID>)"
if ! [ "$cur" = "$last" ]
then
last="$cur"
echo "$(date) $cur"
fi
sleep 1
done
Explicación: La ps
opción -o nlwp
imprime directamente el número de subprocesos, por lo que no es necesario llamar wc -l
. También puede utilizar $(pidof programname)
en lugar de <PID>
para determinar el ID del proceso automáticamente. También agregué la fecha actual vía $(date)
la cual me parece útil. Si no te gusta simplemente elimínalo.