プロセスを実行していて、スレッドの数を数えています
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
スレッド数を直接出力するので、 を呼び出す必要はありませんwc -l
。$(pidof programname)
の代わりにを使って<PID>
、プロセス ID を自動的に判別することもできます。 また、 を使って現在の日付も追加しましたが、$(date)
これは便利だと思います。気に入らない場合は削除してください。