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.
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.
result=`ps -Al | grep command-name | wc -l`
echo $result
ps -Al | grep -c bash
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
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.
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]) } }'
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.
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.