web-dev-qa-db-fra.com

Comment trouver un processus de sommeil dans Ubuntu?

Existe-t-il un moyen de trouver des processus en veille dans Ubuntu?

Je peux voir que top peut répertorier le nombre de processus en veille, mais je souhaite qu’ils soient répertoriés avec leur nom.

Y a-t-il des commandes pour ça?

7
Ant's

Essaye ça:

ps o state,command axh | grep "^[SD]" | cut -b 3-

pour lister les commandes des processus avec un état de veille pouvant être interrompu et ininterrompu.

  • psémet uniquement l'état et les commandes de tous les processus (axname__) et hsupprime la ligne d'en-tête.
  • grepfiltre les processus autres que les deux états de veille
  • cutest utilisé pour supprimer à nouveau la sortie d'état.
  • Remplacez éventuellement commandpar ucmdsi vous n'avez pas besoin du nom complet, ni de tous les arguments.

C’est probablement un script sous-optimal ici, mais je n’ai pas trouvé de moyen rapide de filtrer pspour un état spécifique.

5
gertvdijk
ps -e S 

vous montrera les processus de sommeil.

1
user2327875

Vous pouvez récupérer les informations du haut, qui peuvent être exécutées en mode de traitement par lots (-b).

top -bn1 | awk 'NR > 7 && $8 ~ /S|D/ { print $12 }'
  • -n1 top s'exécute une seule fois et se ferme.
  • NR > 7 ignore l'en-tête.
  • $8 ~ /S|D/ sélectionne les programmes dont l'état est D ou S.

Les états possibles sont, de top(1):

 'D' = sommeil ininterruptible 
 'R' = courir 
 'S' = dormir 
 'T' = tracer ou arrêter 
 'Z '= zombie 
1
Thor

Utilisation de awk et ps

ps o pid,state,command | \
    awk ' {if ($2 == "T") {printf "%s\t%s\t%s\n","Sleeping",$1,$3};}'

Exemple

Démarrez mc dans un terminal, ouvrez un nouveau terminal et lancez les commandes ci-dessous.

kill -STOP $(pgrep mc)
ps o pid,state,command | \
    awk ' {if ($2 == "T") {printf "%s\t%s\t%s\n","Sleeping",$1,$3};}'

La sortie est

Sleeping    21668   mc
0
A.B.