commande top-c sous linux pour filtrer les processus listés en fonction de processname
top -c
Top répertorie tous les processus, il existe de bonnes options pour filtrer les processus par nom d'utilisateur en utilisant l'option-u mais je me demande s'il existe un moyen facile de filtrer les processus basés sur processname listés sous la colonne de commande de la sortie supérieure.
Par exemple, je voudrais top - some option-substring de processname et top affiche les pid ayant seulement cette sous-chaîne dans son nom de commande
8 réponses
Utiliser pgrep pour obtenir les pid des lignes de commande correspondantes:
top -c -p $(pgrep -d',' -f string_to_match_in_cmd_line)
Top -p
attend une liste de pid séparée par des virgules donc nous utilisons -d','
dans pgrep. L'indicateur -f
dans pgrep fait correspondre la ligne de commande au lieu du nom du programme.
Cela peut être fait de manière interactive
Après avoir exécuté top -c
, Appuyez sur o et écrivez un filtre sur une colonne, par exemple pour afficher les lignes où la colonne de commande contient la chaîne foo, écrivez COMMAND=foo
Si vous voulez juste une sortie de base, cela peut suffire:
top -bc |grep name_of_process
Vous pouvez ajouter des filtres à top
alors qu'il est en cours d'exécution, appuyez simplement sur la o clé, puis tapez une expression de filtre. Par exemple, pour surveiller tous les processus java, utilisez l'expression de filtre COMMAND=java
. Vous pouvez ajouter plusieurs filtres en appuyant sur la touche à nouveau, vous pouvez filtrer par utilisateur avec le u clé, et vous pouvez effacer tous les filtres avec de l'= clé.
La commande de @ perreal fonctionne très bien! Si vous oubliez, essayez en deux étapes...
Exemple: haut du filtre pour afficher uniquement l'application appelée yakuake:
$ pgrep yakuake
1755
$ top -p 1755
Commandes interactives utiles 'c': bascule le chemin complet par rapport au nom de la commande "k": tuer par PID 'F' : filtrer par... sélectionnez avec des flèches... appuyez ensuite sur ' s ' pour définir le tri
La réponse ci-dessous est bonne aussi... Je cherchais ça aujourd'hui mais je ne pouvais pas le trouver. Merci
Après avoir cherché tant de réponses sur StackOverflow, Je n'ai pas vu de réponse adaptée à mes besoins.
C'est-à-dire, pour faire la commande top pour continuer à rafraîchir avec un mot-clé donné, et nous n'avons pas besoin de CTRL+C / top encore et encore lorsque de nouveaux processus apparaissent.
J'en fais donc un nouveau...
Voici la version sans redémarrage.
__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; sleep 1; done;)
Modifiez le mot-clé __et cela devrait fonctionner. (Ubuntu 2.6.38 testé)
2.14.2015 ajouté: La partie charge de travail du système est manquante avec le code ci-dessus. Pour les personnes qui se soucient de la partie "charge moyenne":
__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; uptime; sleep 1; done;)
La plupart des réponses échouent ici, lorsque la liste des processus dépasse 20 processus. C'est top -p
limite d'option.
Pour ceux qui ont un top plus ancien qui ne prend pas en charge le filtrage avec les options o
, Voici un exemple scriptable pour obtenir une sortie plein écran/console (des informations récapitulatives sont manquantes dans cette sortie).
__keyword="YOUR_FILTER" ; ( FILL=""; for i in $( seq 1 $(stty size|cut -f1 -d" ")); do FILL=$'\n'$FILL; done ; while :; do HSIZE=$(( $(stty size|cut -f1 -d" ") - 1 )); (top -bcn1 | grep "$__keyword"; echo "$FILL" )|head -n$HSIZE; sleep 1;done )
Quelques explications
__keyword = your grep filter keyword
HSIZE=console height
FILL=new lines to fill the screen if list is shorter than console height
top -bcn1 = batch, full commandline, repeat once
J'ai fini par utiliser un script shell avec le code suivant:
#!/bin/bash
while [ 1 == 1 ]
do
clear
ps auxf |grep -ve "grep" |grep -E "MSG[^\ ]*" --color=auto
sleep 5
done