Contando el número de procesos no inactivos de un usuario determinado

Contando el número de procesos no inactivos de un usuario determinado

Me gustaría contar la cantidad de procesos no inactivos iniciados por un usuario determinado. Sé que los procesos inactivos son los que tienen "S" o "D" en su psvariable de estado. También sé que puedo contar procesos de una lista que contiene variables usery statemediante:

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

De manera similar, sé que podría contar los procesos de sueño de la siguiente manera:

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

Sin embargo, no puedo entender cómo utilizar ambas informaciones para contar los procesos no inactivos iniciados por el usuario username.

Respuesta1

En la salida del comando

ps -e -o user,state

el estado es el último carácter de cada línea. Básicamente, contamos las líneas que contienen el nombre de usuario dado y luego no terminan en an Sni en a D:

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

Esto encontrará (o contará) todas las líneas que contengan la palabra pduck (mi nombre de usuario) y no terminen en So D.

Es -Enecesario que grepcomprenda la expresión regular.

@steeldriversugerido en un comentario a"seleccione el usuario -u pducky omítalo por completo de la lista de campos de salida". Estoy de acuerdo, esto es aún mejor, pero luego debemos soltar el -einterruptor porque eso seleccionaría todos los procesos (no solo los del usuario pduck):

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

información relacionada