Como selecionar processos específicos com 'top'?

16

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

'1 2 3'

top -p aceita argumentos delimitados por vírgulas: 1, 2, 3 .

Isso significa que top -p 'pidof program' não funciona:

    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 o awk, sed, etc ...

    
por Tshepang 13.01.2011 / 11:53

3 respostas

22

Uma alternativa para sed para 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, pgrep pode funcionar bem aqui:

top -p $(pgrep -d , program)

Certifique-se de deixar um espaço entre -d e , , pois a vírgula é o argumento (o deliminador).

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

    
por 13.01.2011 / 17:53
6

sed substitui seu por , :

top -p $(pidof program | sed 's/ /, /g')
    
por 13.01.2011 / 11:57
3

Isso funciona muito bem para ficar de olho em mais de um programa:

top -p 'pgrep -d, -f program1', 'pgrep -d, -f program2'
    
por 21.10.2013 / 10:04