web-dev-qa-db-fra.com

Comment compter le nombre d'instances de processus avec bash?

L'écriture

ps aux | awk '{print $11}'

Me donne toutes les instances de processus, mais comment puis-je les compter, y a-t-il une commande qui fait ça?

3
adadaae12313412

As ps aux imprime des informations sur un processus par ligne (y compris un titre qui peut être désactivé avec l'option --no-heading).

Par conséquent, vous pouvez facilement compter les processus en comptant simplement les lignes de cette sortie, en utilisant wc:

ps aux --no-heading | wc -l
6
Byte Commander

Si vous voulez utiliser awk:

ps aux --no-heading | awk 'END {print NR}'

et si vous voulez compter le processus d'un utilisateur spécifique:

ps -u ravexina -f --no-header | wc -l

Vous pouvez également vérifier vous-même le système de fichiers /proc:

ls /proc | grep ^[1-9] -c

ou

ls -d /proc/[1-9]* | wc -l
2
Ravexina

D'autres réponses ont déjà indiqué que ps aux ajoute un en-tête, vous avez donc également besoin de l'option --no-heading. Nous pouvons également utiliser la commande pgreppour obtenir les PID de processus, puis les compter.

Fondamentalement, nous pouvons faire,

pgrep '^.*$' | awk 'END{print NR}'

L'astuce ici est que le bloc de code END{} est toujours exécuté après le traitement du fichier, de stdin ou du pipeline, et que le NR reste inchangé, ce qui correspond au "nombre d'enregistrements" ou au nombre de lignes s'il ne s'agit que d'un fichier ou d'un pipeline. En ce qui concerne pgrepname__, nous ne faisons que mettre en correspondance tout processus avec l'expression régulière ^.*$, obtenant ainsi la liste de tous les PID.

Et pour compter les lignes, vous pouvez prendre littéralement n'importe quelle méthode de Comment compter les lignes de texte? question, il n'est pas nécessaire que ce soit awkname__.

1