Como selecionar processos específicos com 'top'?

18

No caso de um programa ter várias instâncias, a execução pidof programfornece:

`1 2 3`

top -paceita argumentos delimitados por vírgula: 1, 2, 3.

Isso significa que top -p `pidof program`não funcionará:

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

Você pode me mostrar como fazer isso? Eu não estou familiarizado com awk, sed, etc ...

tshepang
fonte

Respostas:

25

Uma alternativa sedpara coisas simples como esta é tr:

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

tr também pode manipular facilmente um número variável de espaços:

tr -s ' ' ','

Além disso, se você tiver disponível, pgreppode funcionar bem aqui:

top -p $(pgrep -d , program)

Deixe um espaço entre -de ,como a vírgula é o argumento (o deliminador).

Além disso, observe que o pgrep retornará todos os resultados do "programa", portanto, se você tiver um processo chamado "program-foo", isso também será retornado (daí o nome pgrep).

Steven D
fonte
Para mais de um programatop -p $(pgrep -d, "(nginx|mysql)" )
user2037659 12/12
6

sedsubstitui o seu por ,:

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

Isso funciona bem para manter um olho em mais de um programa:

top -p `pgrep -d, -f program1`, `pgrep -d, -f program2`
Ries
fonte
Melhor uso:top -p $(pgrep -d, "(nginx|mysql)" )
user2037659 12/12