Я хотел бы считать количество неждущих процессов запущенным данным пользователем. Я знаю, что ждущие процессы - те с "S" или "D" в их ps
переменная состояния. Я также знаю, что могу считать процессы из списка, содержащего переменные user
и state
:
ps -e -o user,state | grep -c 'username'
Точно так же я знаю, что мог считать ждущие процессы:
ps -e -o user,state | grep -c 'S|D'
Однако я не могу понять это, как использовать обе информации для подсчета неждущих процессов запущенными пользователем username
.
В выходных данных команды
ps -e -o user,state
состояние является последним символом в каждой строке. Таким образом, мы в основном считаем строки, содержащие данное имя пользователя, и затем не заканчиваем ни на S
, ни на D
:
ps -e -o user,state | grep -c -E 'pduck.*[^SD] Это найдет (или подсчитает) все строки, содержащие слово [ 115] (мое имя пользователя) и не заканчивается на S
или D
.
-E
является необходимым, поэтому grep
понимает регулярное выражение.
@steeldriver предложил в комментарии к «выбрать пользователя с помощью -u pduck
и полностью исключить его из списка полей вывода» . Я согласен, это даже лучше, но тогда нам нужно убрать переключатель -e
, потому что он выберет все процессы (не только пользовательские pduck
):
ps -u pduck -o state | grep -c -E '[^SD]
Это найдет (или подсчитает) все строки, содержащие слово [ 115] (мое имя пользователя) и не заканчивается на S
или D
.
-E
является необходимым, поэтому grep
понимает регулярное выражение.
@steeldriver предложил в комментарии к «выбрать пользователя с помощью -u pduck
и полностью исключить его из списка полей вывода» . Я согласен, это даже лучше, но тогда нам нужно убрать переключатель -e
, потому что он выберет все процессы (не только пользовательские pduck
):
ps -u pduck -o state | grep -c -E '[^SD]