Output
觀看:僅當自上次輸出後輸出發生更改時才列印到螢幕
我正在執行一個程序,我正在計算執行緒數
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
等等。
您可以通過管道傳輸到
uniq
:while ps -o nlwp= -p "$pid"; do sleep 1; done | uniq
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)
這對我來說似乎很有用。如果您不喜歡它,那麼只需將其刪除。