21

In case of one program having multiple instances, running pidof program gives:

`1 2 3`

top -p accepts comma-delimited arguments: 1, 2, 3.

This means that top -p `pidof program` won't work:

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

Can you show me how to do this. I'm not familiar with awk, sed, etc...

3 Answers 3

28

An alternative to sed for simple things like this is tr:

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

tr can also easily handle a variable number of spaces:

tr -s ' ' ','

Additionally, if you have it available, pgrep can work well here:

top -p $(pgrep -d , program)

Make sure that you leave a space between -d and , as the comma is the argument (the deliminator).

Also, note that pgrep will return every result of "program" so if you have a process called "program-foo," then this will also be returned (hence the name pgrep).

1
  • 1
    For more than one program top -p $(pgrep -d, "(nginx|mysql)" ) Dec 12, 2019 at 20:44
6

sed replaces your with ,:

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

This works nicely for keeping an eye on more than one program:

top -p `pgrep -d, -f program1`, `pgrep -d, -f program2`
2
  • Better use: top -p $(pgrep -d, "(nginx|mysql)" ) Dec 12, 2019 at 20:39
  • What if you want to distinguish between say ssh and ssh -x? Feb 21, 2021 at 17:27

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .