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?
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 (ax
name__) et h
supprime la ligne d'en-tête.grep
filtre les processus autres que les deux états de veillecut
est utilisé pour supprimer à nouveau la sortie d'état.command
par ucmd
si 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 ps
pour un état spécifique.
ps -e S
vous montrera les processus de sommeil.
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
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