it-swarm-pt.com

Como selecionar processos específicos com 'top'?

No caso de um programa ter várias instâncias, executando pidof program fornece:

`1 2 3`

top -p aceita 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 ...

18
tshepang

Uma alternativa para sed para coisas simples como esta é tr:

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

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

tr -s ' ' ','

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

top -p $(pgrep -d , program)

Certifique-se de deixar um espaço entre -d e , 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).

25
Steven D

sed substitui o seu por ,:

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

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

top -p `pgrep -d, -f program1`, `pgrep -d, -f program2`
3
Ries