Zählen der Anzahl nicht schlafender Prozesse eines bestimmten Benutzers

Zählen der Anzahl nicht schlafender Prozesse eines bestimmten Benutzers

Ich möchte die Anzahl der nicht schlafenden Prozesse zählen, die von einem bestimmten Benutzer gestartet wurden. Ich weiß, dass die schlafenden Prozesse diejenigen sind, deren psStatusvariable „S“ oder „D“ enthält. Ich weiß auch, dass ich Prozesse aus einer Liste mit Variablen zählen kann userund statezwar durch:

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

Ebenso weiß ich, dass ich die Schlafvorgänge folgendermaßen zählen könnte:

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

Ich kann jedoch nicht herausfinden, wie ich beide Informationen verwenden kann, um die vom Benutzer gestarteten, nicht ruhenden Prozesse zu zählen username.

Antwort1

In der Ausgabe des Befehls

ps -e -o user,state

der Status ist das letzte Zeichen in jeder Zeile. Wir zählen also grundsätzlich die Zeilen, die den angegebenen Benutzernamen enthalten und dann weder mit einem Snoch mit einem enden D:

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

Dadurch werden alle Zeilen gefunden (oder gezählt), die das Wort pduck (mein Benutzername) enthalten und nicht mit Soder enden D.

Dies -Eist notwendig, um grepden regulären Ausdruck zu verstehen.

@Stahlfahrerschlug in einem Kommentar vor,„Wählen Sie den Benutzer aus -u pduckund lassen Sie ihn vollständig aus der Liste der Ausgabefelder weg.“. Ich stimme zu, das ist sogar noch besser, aber dann müssen wir den -eSchalter fallen lassen, weil sonst alle Prozesse ausgewählt würden (nicht nur die des Benutzers pduck):

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

verwandte Informationen