¿Cómo seleccionar procesos específicos con 'top'?

18

En caso de que un programa tenga varias instancias, la ejecución pidof programproporciona:

`1 2 3`

top -pacepta argumentos separados por comas: 1, 2, 3.

Esto significa que top -p `pidof program`no funcionará:

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

¿Me puede mostrar cómo hacer esto? No estoy familiarizado con awk, sed, etc.

tshepang
fuente

Respuestas:

25

Una alternativa sedpara cosas simples como esta es tr:

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

tr También puede manejar fácilmente un número variable de espacios:

tr -s ' ' ','

Además, si lo tiene disponible, pgreppuede funcionar bien aquí:

top -p $(pgrep -d , program)

Asegúrese de dejar un espacio entre -dy ,ya que la coma es el argumento (el deliminador).

Además, tenga en cuenta que pgrep devolverá todos los resultados de "program", por lo que si tiene un proceso llamado "program-foo", también se devolverá (de ahí el nombre pgrep).

Steven D
fuente
Para más de un programatop -p $(pgrep -d, "(nginx|mysql)" )
usuario2037659
6

sedreemplaza su con ,:

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

Esto funciona muy bien para vigilar más de un programa:

top -p `pgrep -d, -f program1`, `pgrep -d, -f program2`
Ries
fuente
Mejor uso:top -p $(pgrep -d, "(nginx|mysql)" )
user2037659