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


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

  • For more than one program top -p $(pgrep -d, "(nginx|mysql)" ) – user2037659 yesterday

sed replaces your with ,:

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

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

top -p `pgrep -d, -f program1`, `pgrep -d, -f program2`
  • Better use: top -p $(pgrep -d, "(nginx|mysql)" ) – user2037659 yesterday

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.