Watch: 마지막 출력 이후 출력이 변경된 경우에만 화면에 인쇄합니다.

Watch: 마지막 출력 이후 출력이 변경된 경우에만 화면에 인쇄합니다.

프로세스를 실행 중이고 스레드 수를 세고 있습니다.

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)

관련 정보