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

98
demandé sur alex 2012-08-22 18:39:32

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.

154
répondu perreal 2016-05-12 15:11:18

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
78
répondu nos 2014-06-17 21:30:34

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é.

50
répondu Don Kirkby 2016-01-09 01:58:18

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

10
répondu BBW Before Windows 2014-06-24 02:24:30

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;)
7
répondu Val 2015-02-24 05:44:51

Et ça?

top -c -p <PID>
1
répondu Satish 2012-08-22 16:32:06

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
1
répondu Manwe 2017-11-21 08:45:30

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
0
répondu Jester 2015-11-10 14:21:12