จะเลือกกระบวนการเฉพาะด้วย 'top' ได้อย่างไร


18

ในกรณีที่โปรแกรมหนึ่งมีหลายอินสแตนซ์การรันpidof programจะให้:

`1 2 3`

top -pยอมรับข้อโต้แย้งที่คั่นด้วยเครื่องหมายจุลภาค: 1, 2, 3.

ซึ่งหมายความว่าtop -p `pidof program`จะไม่ทำงาน:

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

คุณช่วยแสดงให้ฉันดูวิธีการทำสิ่งนี้ได้ไหม ฉันไม่คุ้นเคยกับ awk, sed, etc ...

คำตอบ:


25

ทางเลือกsedสำหรับสิ่งง่าย ๆ เช่นนี้คือtr:

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

tr ยังสามารถจัดการกับช่องว่างจำนวนตัวแปรได้อย่างง่ายดาย:

tr -s ' ' ','

นอกจากนี้หากคุณมีให้pgrepสามารถทำงานได้ดีที่นี่:

top -p $(pgrep -d , program)

ตรวจสอบให้แน่ใจว่าคุณเว้นช่องว่างระหว่าง-dและ,เนื่องจากเครื่องหมายจุลภาคเป็นอาร์กิวเมนต์ (ตัวคั่น)

นอกจากนี้โปรดทราบว่า pgrep จะส่งคืนผลลัพธ์ทั้งหมดของ "โปรแกรม" ดังนั้นหากคุณมีกระบวนการที่เรียกว่า "program-foo" ดังนั้นสิ่งนี้จะถูกส่งคืน (เช่นชื่อ pgrep)


สำหรับมากกว่าหนึ่งโปรแกรมtop -p $(pgrep -d, "(nginx|mysql)" )
user2037659


3

วิธีนี้ใช้ได้ผลดีในการเฝ้าดูโปรแกรมมากกว่าหนึ่งรายการ:

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

ใช้งานได้ดีกว่า:top -p $(pgrep -d, "(nginx|mysql)" )
user2037659
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.