Bagaimana cara memilih proses spesifik dengan 'atas'?

18

Dalam kasus satu program memiliki banyak instance, menjalankan pidof programmemberi:

`1 2 3`

top -pmenerima argumen koma-delimited: 1, 2, 3.

Ini berarti itu top -p `pidof program`tidak akan berfungsi:

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

Dapatkah Anda menunjukkan kepada saya bagaimana melakukan ini. Saya tidak terbiasa dengan awk, sed, dll ...

tepang
sumber

Jawaban:

25

Alternatif seduntuk hal-hal sederhana seperti ini adalah tr:

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

tr juga dapat dengan mudah menangani sejumlah ruang variabel:

tr -s ' ' ','

Selain itu, jika tersedia, pgrepdapat berfungsi dengan baik di sini:

top -p $(pgrep -d , program)

Pastikan Anda meninggalkan spasi di antara -ddan ,karena koma adalah argumen (pembatas).

Juga, perhatikan bahwa pgrep akan mengembalikan setiap hasil dari "program" jadi jika Anda memiliki proses yang disebut "program-foo," maka ini juga akan dikembalikan (maka nama pgrep).

Steven D
sumber
Untuk lebih dari satu programtop -p $(pgrep -d, "(nginx|mysql)" )
user2037659
6

sedganti dengan Anda ,:

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

Ini berfungsi baik untuk mengawasi lebih dari satu program:

top -p `pgrep -d, -f program1`, `pgrep -d, -f program2`
Ries
sumber
Penggunaan yang lebih baik:top -p $(pgrep -d, "(nginx|mysql)" )
user2037659