Contando o número de processos que não estão adormecidos de um determinado usuário

Contando o número de processos que não estão adormecidos de um determinado usuário

Gostaria de contar o número de processos que não estão adormecidos iniciados por um determinado usuário. Eu sei que os processos adormecidos são aqueles com "S" ou "D" em sua psvariável de status. Também sei que posso contar processos a partir de uma lista contendo variáveis user​​e statepor:

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

Da mesma forma, sei que poderia contar os processos de sono por:

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

No entanto, não consigo descobrir como usar ambas as informações para contar os processos não adormecidos iniciados pelo usuário username.

Responder1

Na saída do comando

ps -e -o user,state

o estado é o último caractere de cada linha. Então, basicamente contamos as linhas que contêm o nome de usuário fornecido e não terminam em an Snem em a D:

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

Isso encontrará (ou contará) todas as linhas que contêm a palavra pduck (meu nome de usuário) e não terminam em Sou D.

O -Eé necessário para grepentender a expressão regular.

@steeldriversugerido em um comentário para"selecione o usuário -u pducke omita-o completamente da lista de campos de saída". Concordo, isso é ainda melhor, mas precisamos abandonar a -eopção porque isso selecionaria todos os processos (não apenas os de user pduck):

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

informação relacionada