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 ps
variable de estado. También sé que puedo contar procesos de una lista que contiene variables user
y state
mediante:
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 S
ni 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 S
o D
.
Es -E
necesario que grep
comprenda la expresión regular.
@steeldriversugerido en un comentario a"seleccione el usuario -u pduck
y omítalo por completo de la lista de campos de salida". Estoy de acuerdo, esto es aún mejor, pero luego debemos soltar el -e
interruptor porque eso seleccionaría todos los procesos (no solo los del usuario pduck
):
ps -u pduck -o state | grep -c -E '[^SD]$'