Wie kann ich die Anzahl der Ruhevorgänge mithilfe eines Shell-Skripts zählen?
command-line
scripts
process
aeomey amani
quelle
quelle
Antworten:
Erweiterte Erklärung ... ich vertraue darauf, dass Sie alles in sich aufnehmen, da es Ihre Hausaufgaben sind ...
Listen Sie Prozesse mit dem
ps
Befehl aufOh, dies zeigt nur die Prozesse der aktuellen Sitzung. Wir wollen alle Prozesse im System zeigen. Dafür können wir die
-e
Flagge benutzenaber wie zeigen wir welche schlafen?
Sie können die
-l
Option oderu
Option verwenden. Dies gibt mehr Details einschließlich des Status des Prozesses. Schlafvorgänge haben einen BuchstabenS
oderD
in der Spalte STATvon
man ps
Wir können die
ps
Ausgabe so formatieren , dass NUR die Zustände angezeigt werden, um das Zählen zu vereinfachen:Hier erhalten wir
-e
alle Prozesse und das-o
Flag, gefolgt von der Art der Ausgabe, die wir wollen. Dieser Befehl gibt nur den Statusbuchstaben aus. Wir können|
diese Ausgabe dann weiterleiten ,grep
um die Zeilen mitS
oderD
den Schlafprozessen zu zählen:grep
sucht nach Text. Die-c
Option weist es an, nur Übereinstimmungen zu zählen, anstatt den gefundenen Text selbst auszugeben. Die-E
Option weistgrep
an, einen erweiterten regulären|
Ausdruck zu verwenden, damit wir die Zeichen verwenden können, um Dinge ODER Dinge mit dem Ausdruck: abzugleichenthing|stuff
. Verwenden Sie bei Verwendung von Regex einfache Anführungszeichen, um Erweiterungen durch die Shell zu verhindern.quelle
grep -c '[SD]'
. (Jede Alternative ist nur ein einzelnes Zeichen, daher ist eine Zeichenklasse ausreichend.)Sehr einfach, wenn Sie wissen, dass der
ps
Befehl den Status für Schlafprozesse entwederS
für unterbrechbaren Schlaf oderD
für ununterbrochenen Schlaf ausgibt , und Sie können das-o s
Flag verwenden, um den Status dieser zu ermitteln. Jetzt müssen Sie nur noch die Ausgabe durchlaufengrep
, um das Auftreten dieser Flags zu zählen. Wie so:quelle
Eine andere Möglichkeit besteht darin, die Anzahl der Prozesse in jedem Status mithilfe von Folgendem aufzulisten:
quelle
Das
top
Dienstprogramm gibt die Anzahl der Aufgaben an und zeigt an, wie viele ausgeführt werden und wie viele schlafen. Das ändert sich natürlich von Moment zu Moment, aber auch die Ausgabe eines dieser Einzeiler. Wie bei jedem * nix-Dienstprogramm wird dieman
Seite detaillierter.quelle
top
das ist einfacher als dieps
-basierte Methode in den anderen Antworten detailliert,top
ist in der Tat sehr mächtig , und Sie haben Recht , dass die Anzahl der Schlafprozesse kann von seinem Ausgang extrahiert werden. Ich schlage vortop -bn1 | sed -n 2p | grep -oP '\d+(?= sleeping)'
, obwohl es einen einfacheren Weg gibt, den ich nicht für so gut oder besser gehalten habe. Wenn Sie möchten, können Sie dies (mit oder ohne Änderung) Ihrer Antwort als Beispiel hinzufügen.