Я запускаю процесс и подсчитываю количество потоков с помощью
ps huH p <PID_OF_U_PROCESS> | wc -l
Я могу вести эту ветку watch
вот так;
watch -n 1 ps huH p <PID_OF_U_PROCESS> | wc -l
Это выведет количество потоков, запущенных процессом, но обычно это количество не меняется.
Как вывести на экран новое число, только если оно изменилось с момента последнего выполнения команды?
Например:
64 65 64
(проходит несколько минут)
65
И т. д.
решение1
Вы можете просто передать сообщение по каналу uniq
:
while ps -o nlwp= -p "$pid"; do sleep 1; done | uniq
решение2
watch
не может сделать это напрямую. Хотя вы можете выделить различия в выводе команды (через option -d
) или выйти при изменении вывода (через option -g
), невозможно отобразить вывод более чем одного запуска. Но вы можете сделать это с помощью других распространенных инструментов.
Одно из многих возможных решений:
last=""; while true; do cur="$(ps h -o nlwp -p <PID>)"; if ! [ "$cur" = "$last" ]; then last="$cur"; echo "$(date) $cur"; fi; sleep 1; done
Или более читабельно:
last=""
while true
do
cur="$(ps h -o nlwp -p <PID>)"
if ! [ "$cur" = "$last" ]
then
last="$cur"
echo "$(date) $cur"
fi
sleep 1
done
Объяснение: ps
опция -o nlwp
напрямую выводит количество потоков, поэтому вам не нужно вызывать wc -l
. Вы также можете использовать $(pidof programname)
вместо , <PID>
чтобы автоматически определить идентификатор процесса. Я также добавил текущую дату, $(date)
что кажется мне полезным. Если вам это не нравится, просто удалите это.