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

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

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

Точно так же я знаю, что мог считать ждущие процессы:

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

Однако я не могу понять это, как использовать обе информации для подсчета неждущих процессов запущенными пользователем username.

0
задан 22 May 2019 в 12:27

1 ответ

В выходных данных команды

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]
0
ответ дан 22 May 2019 в 12:27

Другие вопросы по тегам:

Похожие вопросы: