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)、複数の実行の出力を表示することはできません。ただし、他の一般的なツールを使用してこれを達成できます。

可能な多くの解決策の1つ:

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)

関連情報