計算給定使用者的非睡眠行程數

計算給定使用者的非睡眠行程數

我想計算給定用戶啟動的非睡眠進程的數量。我知道睡眠進程是狀態變數中帶有“S”或“D”的進程ps。我還知道我可以從包含變數的列表中計算進程userstate

ps -e -o user,state | grep -c 'username'

同樣,我知道我可以透過以下方式計​​算睡眠進程:

ps -e -o user,state | grep -c 'S|D'

但是,我不知道如何使用這兩個資訊來計算使用者啟動的非睡眠進程username

答案1

在命令的輸出中

ps -e -o user,state

狀態是每行的最後一個字元。所以我們基本上計算包含給定使用者名稱的行,然後既不以 anS也不以 a結尾D

ps -e -o user,state | grep -c -E 'pduck.*[^SD]$'

這將找到(或計算)包含單字pduck (我的用戶名)並且不以Sor結尾的所有行D

-Egrep理解正規表示式所必需的。

@steeldriver在評論中建議“選擇使用者-u pduck並從輸出欄位清單中完全忽略它”。我同意,這更好,但是我們需要刪除開關,-e因為這將選擇所有進程(而不僅僅是 user 的進程pduck):

ps -u pduck -o state | grep -c -E '[^SD]$'

相關內容