web-dev-qa-db-fra.com

Recherche du nombre de processus sous Linux via une ligne de commande

Je cherchais le meilleur moyen de trouver le nombre de processus en cours portant le même nom via la ligne de commande sous Linux. Par exemple, si je voulais trouver le nombre de processus bash en cours d'exécution et obtenir "5". Actuellement, j'ai un script qui fait un 'pidof' puis fait un compte sur la chaîne tokenisée. Cela fonctionne bien, mais je me demandais s’il existait un meilleur moyen de le faire entièrement via la ligne de commande. Merci d'avance pour votre aide. 

21
Traker

Sur les systèmes pour lesquels pgrep est disponible, l'option -c renvoie le nombre de processus correspondant au nom donné.

pgrep -c command_name

Notez qu'il s'agit d'une correspondance de style grep-, et non exacte, donc par exemple. pgrep sh correspondra également aux processus bash. Si vous voulez une correspondance exacte, utilisez également l'option -x.

Si pgrep n'est pas disponible, vous pouvez utiliser ps et wc.

ps -C command_name --no-headers | wc -l

L'option -C de ps prend command_name en argument et le programme imprime une table d'informations sur les processus dont le nom d'exécutable correspond au nom de commande donné. C'est une correspondance exacte, pas grep- style. L'option --no-headers supprime les en-têtes de la table, qui sont normalement imprimés en première ligne. Avec --no-headers, vous obtenez une ligne par processus correspondant. Ensuite, wc -l compte et imprime le nombre de lignes de son entrée.

51
David Z
result=`ps -Al | grep command-name | wc -l`
echo $result
10
Amardeep AC9MF
ps -Al | grep -c bash
7
Alex B

Tu peux essayer :

ps -ef | grep -cw [p] nom_rocessus

OR

ps aux | grep -cw [p] nom_rocessus

par exemple:  

ps -ef | grep -cw [i] nit

5
Bhagya Prasad NR

Certaines des solutions ci-dessus n'ont pas fonctionné pour moi, mais elles m'ont aidée à atteindre cet objectif.

ps aux | grep [j]ava -c

Pour les débutants sous Linux:

ps aux imprime tous les processus en cours d'exécution, grep recherche tous les processus correspondant à Word Java , les crochets [] suppriment le processus que vous venez d'exécuter afin de ne pas l'inclure en tant que processus en cours et, finalement, l'option -c représente le nombre.

3
Niall O Shea

Lister tous les noms de processus, trier et compter

ps --no-headers -A -o comm | sort | uniq -c

Vous pouvez également lister le processus attaché à un tty

ps --no-headers a -o comm | sort | uniq -c

Vous pouvez filtrer avec:

ps --no-headers -A -o comm | awk '{ list[$1] ++ } END { for (i in list) { if (list[i] > 10) printf ("%20s: %s\n", i, list[i]) } }'
2
fraff

Le script bash suivant peut être exécuté en tant que tâche cron et vous pouvez éventuellement recevoir un courrier électronique si un processus se forge trop.

for i in `ps -A -o comm= --sort=+comm | uniq`; 
do 
    if (( `ps -C $i --no-headers | wc -l` > 10 )); then 
        echo `hostname` $i `ps -C $i --no-headers | wc -l` ;
    fi
done

Remplacez 10 par votre numéro de problème. 

TODO: "10" pourrait également être passé comme paramètre de ligne de commande. De plus, peu de processus système peuvent être placés dans la liste des exceptions.

1
Sury Soni

Vous pouvez utiliser ps (affichera un instantané des processus) avec wc (comptera le nombre de mots, l'option wc -l comptera les lignes, c'est-à-dire les caractères de nouvelle ligne) . Ce qui est très facile et simple à mémoriser.

ps -e | grep processName | wc -l

Cette commande simple affichera le nombre de processus en cours d'exécution sur le serveur actuel . Si vous souhaitez trouver le nombre de processus en cours d'exécution sur le serveur actuel pour l'utilisateur actuel, utilisez l'option -U de ps.

ps -U root | grep processName | wc -l 

changer de racine avec nom d'utilisateur.

Mais comme mentionné dans de nombreuses autres réponses, vous pouvez également utiliser ps -e | grep -c process_name qui est plus élégant.

0
BreakBadSP