Shell – How to select specific processes with ‘top’

shelltext processingtop

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…

Best Answer

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

Related Question