
プロセスを実行しており、スレッド数をカウントしています。
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)