Comment sélectionner des processus spécifiques avec 'top'?


18

Dans le cas d'un programme ayant plusieurs instances, l'exécution pidof programdonne:

`1 2 3`

top -paccepte arguments séparés par des virgules: 1, 2, 3.

Cela signifie que top -p `pidof program`cela ne fonctionnera pas:

    top: unknown argument '1'
usage:  top -hv | -bcisSH -d delay -n iterations [-u user | -U user] -p pid [,pid ...]

Pouvez-vous me montrer comment faire cela. Je ne connais pas awk, sed, etc ...

Réponses:


25

Une alternative à seddes choses simples comme celle-ci est tr:

top -p $(pidof program | tr ' ' ',')

tr peut également gérer facilement un nombre variable d'espaces:

tr -s ' ' ','

De plus, si vous en disposez, cela pgreppeut bien fonctionner ici:

top -p $(pgrep -d , program)

Assurez-vous de laisser un espace entre -det, comme la virgule est l'argument (le suppresseur).

Notez également que pgrep retournera tous les résultats de "program" donc si vous avez un processus appelé "program-foo", alors il sera également retourné (d'où le nom pgrep).


Pour plus d'un programmetop -p $(pgrep -d, "(nginx|mysql)" )
user2037659

6

sedremplace votre par ,:

top -p $(pidof program | sed 's/ /, /g')

3

Cela fonctionne bien pour garder un œil sur plus d'un programme:

top -p `pgrep -d, -f program1`, `pgrep -d, -f program2`

Meilleure utilisation:top -p $(pgrep -d, "(nginx|mysql)" )
user2037659
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.