프로세스를 실행 중이고 스레드 수를 세고 있습니다.
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
스레드 수를 직접 인쇄하므로 를 호출할 필요가 없습니다 . 대신에 프로세스 ID를 자동으로 결정하는 데 wc -l
사용할 수도 있습니다 . 나는 또한 나에게 맞는 현재 날짜를 추가했습니다 . 마음에 들지 않으면 삭제하세요.$(pidof programname)
<PID>
$(date)