Antworten:
Versuche dies:
ps o state,command axh | grep "^[SD]" | cut -b 3-
zum Auflisten von Befehlen von Prozessen mit einem unterbrechbaren und unterbrechungsfreien Ruhezustand.
psGibt nur den Status und die Befehle aller Prozesse aus ( ax) und hentfernt die Kopfzeile.grep filtert andere Prozesse als die beiden Schlafzuständecut wird verwendet, um die Statusausgabe wieder zu entfernen.commandmit , ucmdwenn Sie den vollständigen Namen nicht brauchen alle Argumente einschließlich.Dies ist hier wahrscheinlich ein suboptimales Skript, aber ich konnte keinen schnellen Weg finden, um psnach einem bestimmten Status zu filtern.
Sie können die Informationen von oben abrufen, die im Batch-Modus ausgeführt werden können ( -b).
top -bn1 | awk 'NR > 7 && $8 ~ /S|D/ { print $12 }'
-n1 top läuft nur einmal und geht.NR > 7 Überspringt den Header.$8 ~ /S|D/Wählt Programme aus, die sich im Status Doder befinden S.Mögliche Zustände sind top(1):
'D' = ununterbrochener Schlaf
'R' = läuft
'S' = schlafen
'T' = verfolgt oder gestoppt
'Z' = Zombie
cut -c40-41,62-anstelle voncut -c40-41,63-
awk.
ps -e S
zeigt Ihnen Schlafprozesse.
-eOption bereitgestellt wird .
-eFall ist. Slautet: "Fassen Sie einige Informationen wie die CPU-Auslastung von toten untergeordneten Prozessen in die übergeordneten Prozesse zusammen." Nichts in dieser Befehlszeile filtert nicht schlafende Prozesse heraus.
Verwenden von awkundps
ps o pid,state,command | \
awk ' {if ($2 == "T") {printf "%s\t%s\t%s\n","Sleeping",$1,$3};}'
Beispiel
Starten Sie mcin einem Terminal, öffnen Sie ein neues Terminal und starten Sie die folgenden Befehle
kill -STOP $(pgrep mc)
ps o pid,state,command | \
awk ' {if ($2 == "T") {printf "%s\t%s\t%s\n","Sleeping",$1,$3};}'
Ausgabe ist
Sleeping 21668 mc