Wie finde ich den Schlafprozess in Ubuntu?

7

Gibt es eine Möglichkeit, Schlafprozesse in Ubuntu zu finden?

Ich kann sehen top, wie viele Schlafvorgänge aufgelistet werden können, aber ich möchte, dass sie mit ihrem Namen aufgelistet werden.

Gibt es dafür Befehle?

Ameisen
quelle

Antworten:

5

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ände
  • cut wird verwendet, um die Statusausgabe wieder zu entfernen.
  • Optional ersetzen 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.

gertvdijk
quelle
@Thor Danke, dass du jetzt den Kommentar entfernt hast. Ich habe meine Antwort aktualisiert.
Gertvdijk
1

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
Thor
quelle
1
Das erste Zeichen des Prozessnamens wird abgeschnitten. Sie müssen cut -c40-41,62-anstelle voncut -c40-41,63-
Hier ist es tatsächlich 63, daher ist die Verwendung bestimmter Spaltennummern unzuverlässig. Ich habe die Analyse auf umgestellt awk.
Thor
1
ps -e S 

zeigt Ihnen Schlafprozesse.

user2327875
quelle
Ähm ... nein. Es werden alle Prozesse angezeigt, indem die -eOption bereitgestellt wird .
Gertvdijk
ps -e S gibt Ihnen tatsächlich alle Prozesse an, die sich in einem Ruhezustand befinden. Sehr hilfreich.
Rob
1
@rob natürlich, weil es alle Prozesse zeigt ... einschließlich derer, die sich nicht im Schlafzustand befinden, was auch der -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.
Muru
0

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
AB
quelle