特定のユーザーのスリープしていないプロセスの数をカウントする

特定のユーザーのスリープしていないプロセスの数をカウントする

特定のユーザーによって開始されたスリープ状態ではないプロセスの数をカウントしたいと思います。スリープ状態のプロセスとは、ステータス変数に「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

状態は各行の最後の文字です。つまり、基本的には、指定されたユーザー名を含み、 または で終わらない行を数えSますD

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

これにより、単語 (my username) を含み、またはpduck で終わらないすべての行が検索 (またはカウント) されます。SD

正規表現を理解するにはが-E必要です。grep

スチールドライバーコメントで提案された「ユーザーを選択し-u pduck、出力フィールドのリストから完全に除外する」-e同意します。これはさらに優れていますが、すべてのプロセス (ユーザーのプロセスだけでなくpduck)が選択されるため、スイッチを削除する必要があります。

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

関連情報