Подсчет количества неспящих процессов данного пользователя

Подсчет количества неспящих процессов данного пользователя

Я хотел бы подсчитать количество не спящих процессов, запущенных данным пользователем. Я знаю, что спящие процессы — это те, у которых в psпеременной статуса есть «S» или «D». Я также знаю, что могу подсчитать процессы из списка, содержащего переменные, userи stateс помощью:

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]$'

Это позволит найти (или подсчитать) все строки, содержащие слово pduck (мое имя пользователя) и не заканчивающиеся на Sили D.

Это -Eнеобходимо для grepпонимания регулярного выражения.

@steeldriverпредложено в комментарии к"выбрать пользователя -u pduckи полностью исключить его из списка выходных полей". Согласен, это даже лучше, но тогда нам нужно будет убрать переключатель, -eпотому что это выберет все процессы (а не только процессы пользователя pduck):

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

Связанный контент