프로세스를 실행 중이고 스레드 수를 계산하고 있습니다.
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
이 작업을 직접 수행할 수 없습니다. 명령 출력의 차이점을 강조 표시하거나( 옵션을 통해 -d
) 출력이 변경될 때 종료할 수 있지만( 옵션을 통해 -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
. 프로세스 ID를 자동으로 결정하기 위해 $(pidof programname)
대신 사용할 수도 있습니다 . 나는 또한 나에게 유용해 보이는 <PID>
현재 날짜를 추가했습니다 . $(date)
마음에 들지 않으면 그냥 제거하세요.