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 ps
variável de status. Também sei que posso contar processos a partir de uma lista contendo variáveis user
e state
por:
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 S
nem 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 S
ou D
.
O -E
é necessário para grep
entender a expressão regular.
@steeldriversugerido em um comentário para"selecione o usuário -u pduck
e omita-o completamente da lista de campos de saída". Concordo, isso é ainda melhor, mas precisamos abandonar a -e
opção porque isso selecionaria todos os processos (não apenas os de user pduck
):
ps -u pduck -o state | grep -c -E '[^SD]$'