Output

觀看:僅當自上次輸出後輸出發生更改時才列印到螢幕

  • November 4, 2015

我正在執行一個程序,我正在計算執行緒數

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)這對我來說似乎很有用。如果您不喜歡它,那麼只需將其刪除。

引用自:https://unix.stackexchange.com/questions/240732