web-dev-qa-db-fra.com

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

En cas d'un programme ayant plusieurs instances, exécuter pidof program donne:

`1 2 3`

top -p Accepte les arguments délimités par des virgules: 1, 2, 3.

Cela signifie que top -p `pidof program` 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 avec Awk, SED, etc ...

18
tshepang

Une alternative à sed pour des 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 l'avez disponible, pgrep peut bien fonctionner ici:

top -p $(pgrep -d , program)

Assurez-vous de laisser un espace entre -d et , Comme la virgule est l'argument (le déliminateur).

Notez également que PGREP retournera tous les résultats du "programme", donc si vous avez un processus appelé "Program-Foo", cela sera également renvoyé (d'où le nom PGREP).

25
Steven D

sed remplace votre avec ,:

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

Cela fonctionne bien pour garder un œil sur plusieurs programmes:

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