Я хотел бы подсчитать количество не спящих процессов, запущенных данным пользователем. Я знаю, что спящие процессы — это те, у которых в 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]$'