web-dev-qa-db-fra.com

Comment puis-je compter le nombre de processus en veille dans mon système?

Comment compter le nombre de processus en veille à l'aide d'un script Shell?

7
aeomey amani

Explication détaillée ... vous confiant de tout prendre en charge puisque c'est votre devoir ...

Lister les processus avec la commande ps

$ ps
  PID TTY          TIME CMD
 4879 pts/3    00:00:00 bash
 5003 pts/3    00:00:00 ps

Oh, cela ne montre que les processus de la session en cours. Nous voulons montrer tous les processus du système. Pour cela, nous pouvons utiliser le drapeau -e

$ ps -e
  PID TTY          TIME CMD
    1 ?        00:00:05 systemd
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 ksoftirqd/0
[and many more lines]

mais comment montrer quels sont ceux qui dorment?

Vous pouvez utiliser l'option -l ou u. Cela donne plus de détails, y compris l'état du processus. Les processus en veille ont une lettre S ou D dans la colonne STAT

de man ps

CODES D'ÉTAT DE PROCESSUS Voici les différentes valeurs que les spécificateurs de sortie s, stat et state (en-tête "STAT" ou "S") afficheront pour décrire l'état d'un processus:

           D    uninterruptible sleep (usually IO)
           R    running or runnable (on run queue)
           S    interruptible sleep (waiting for an event to complete)
           T    stopped by job control signal
           t    stopped by debugger during the tracing
           W    paging (not valid since the 2.6.xx kernel)
           X    dead (should never be seen)
           Z    defunct ("zombie") process, terminated but not reaped by its parent

Nous pouvons formater la sortie ps pour afficher UNIQUEMENT les états, afin de faciliter leur comptage:

ps -e -o state

ici, nous utilisons -e pour obtenir tous les processus et l'indicateur -o, suivi du type de sortie que nous voulons. Cette commande affiche uniquement la lettre d'état. Nous pouvons ensuite diriger (en utilisant |) cette sortie vers grep pour compter les lignes avec S ou D, les processus en veille:

ps -e -o state | grep -cE 'S|D'

grep recherche du texte. L'option -c lui indique de ne compter que les correspondances au lieu d'afficher le texte trouvé. L'option -E indique à grep d'utiliser une expression rationnelle étendue, de sorte que nous puissions utiliser les caractères | pour faire correspondre l'objet OR à l'aide de l'expression: thing|stuff. . Lorsque vous utilisez regex, utilisez des guillemets simples pour empêcher les extensions du shell.

8
Zanna

Très facile si vous savez que la commande ps affiche le statut des processus en veille sous la forme S pour le sommeil interruptible et D pour le sommeil ininterruptible. Vous pouvez également utiliser le drapeau -o s pour rechercher le état de ceux-ci. Maintenant, tout ce que vous avez à faire est d’exécuter la sortie avec grep qui comptera les occurrences de ces drapeaux. Ainsi:

$ ps -e -o s | grep -o 'S\|D' -c                                                                                         
260
5
Sergiy Kolodyazhnyy

Une autre méthode consiste à répertorier le nombre de processus dans chaque état en utilisant:

$ ps -e -o state | sort | uniq -c
  1 R
141 S
1
Pete Escalante

L'utilitaire top indique le nombre de tâches, indiquant le nombre de tâches en cours d'exécution et le nombre de tâches en veille. Bien sûr, cela change moment par moment, mais la production de l'un de ces one-liners également. Comme avec tout utilitaire * nix, la page man donnera plus de détails.

0
DukeW