Làm cách nào để chọn các quy trình cụ thể với 'đầu trang'?


18

Trong trường hợp một chương trình có nhiều phiên bản, việc chạy pidof programsẽ cho:

`1 2 3`

top -pchấp nhận các đối số được phân cách bằng dấu phẩy : 1, 2, 3.

Điều này có nghĩa là top -p `pidof program`sẽ không hoạt động:

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

Bạn có thể chỉ cho tôi cách làm điều này Tôi không quen thuộc với awk, sed, v.v ...

Câu trả lời:


25

Một thay thế sedcho những điều đơn giản như thế này là tr:

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

tr cũng có thể dễ dàng xử lý một số lượng không gian khác nhau:

tr -s ' ' ','

Ngoài ra, nếu bạn có sẵn, pgrepcó thể hoạt động tốt ở đây:

top -p $(pgrep -d , program)

Hãy chắc chắn rằng bạn để lại một khoảng trắng giữa -d,vì dấu phẩy là đối số (dấu phân cách).

Ngoài ra, lưu ý rằng pgrep sẽ trả về mọi kết quả của "chương trình" vì vậy nếu bạn có một quy trình gọi là "chương trình-foo" thì điều này cũng sẽ được trả về (do đó tên pgrep).


Đối với nhiều chương trìnhtop -p $(pgrep -d, "(nginx|mysql)" )
user2037659


3

Điều này hoạt động độc đáo để theo dõi nhiều hơn một chương trình:

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

Sử dụng tốt hơn:top -p $(pgrep -d, "(nginx|mysql)" )
user2037659
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.