我正在運行一個進程,並且正在計算線程數
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
ETC。
答案1
你可以直接透過管道傳輸到uniq
:
while ps -o nlwp= -p "$pid"; do sleep 1; done | uniq
答案2
watch
無法直接執行此操作。儘管您可以突出顯示命令輸出中的差異(透過 option -d
)或在輸出變更時退出(透過 option -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
直接列印線程數,因此您不必調用wc -l
.您也可以使用$(pidof programname)
代替 來<PID>
自動確定進程 ID。我還添加了當前日期,$(date)
這對我來說似乎很有用。如果您不喜歡它,請將其刪除。