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 ...
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).
sed
remplace votre avec ,
:
top -p $(pidof program | sed 's/ /, /g')
Cela fonctionne bien pour garder un œil sur plusieurs programmes:
top -p `pgrep -d, -f program1`, `pgrep -d, -f program2`