Cách lấy (từ thiết bị đầu cuối) tổng số luồng (trên mỗi quy trình và tổng số cho tất cả các quy trình)


Câu trả lời:


53

Để có được số lượng chủ đề cho một pid nhất định:

ps -o nlwp <pid>

Để lấy tổng của tất cả các luồng đang chạy trong hệ thống:

ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'

1
ps -o nlwp <pid>trả về NLWP :), điều đó có nghĩa là gì?
Siddharth

2
@Siddharth NLWP là viết tắt của Số lượng quy trình phát sáng là số lượng chủ đề.
jcollado

Bạn có thể chặn "NLWP" bằng "h" (ẩn tiêu đề); tức là:ps h -o nlwp $pid
bufh

7

Để tìm số lượng luồng chạy một tiến trình duy nhất, bạn có thể xem xét /proc/<pid>/status. Nó nên liệt kê số lượng chủ đề là một trong các lĩnh vực.


3

Tôi đang căn cứ câu trả lời này ps axms. pslà một công cụ tuyệt vời để liệt kê những gì đang chạy.

Nếu bạn muốn lọc theo quy trình, bạn có thể thử một cái gì đó như thế này:

echo $(( `ps axms | grep firefox | wc -l`  - 1))

Chúng tôi trừ 1 vì grep sẽ hiển thị trong danh sách đó.

Đối với tất cả các chủ đề nói chung, điều này sẽ làm việc:

echo $(( `ps axms | wc -l`  - 1))

Chúng tôi trừ đi lần này vì có một hàng tiêu đề.


Điều này là không chính xác, vì nó báo cáo một chuỗi bổ sung cho mỗi quy trình
Score_Under

1

Để có được tổng số luồng (các phần nhỏ của một tiến trình đang chạy đồng thời) của một bạn có thể sử dụng lệnh ps -o nlwp <pid>Nó hoạt động mọi lúc. Nhưng nếu bạn muốn thử xem nó qua một tập tin. bạn có thể nên xem các tệp được tạo cho mỗi và mọi quy trình của hệ thống. Ở đó bạn có thể nhận được các chi tiết cuối cùng của quá trình. Đối với mỗi và mọi quy trình, có một thư mục được tạo trong /proc/<pid>đó bạn cũng có thể xem tất cả các chi tiết khác.


1

Trên linux, đây là một cách để thực hiện theo quy trình:

#!/bin/sh
while read name val; do
    if [ "$name" = Threads: ]; then
        printf %s\\n "$val"
        return
    fi
done < /proc/"$1"/status

Sau đó, bạn có thể gọi tập lệnh này với một PID làm đối số và nó sẽ báo cáo số lượng luồng được sở hữu bởi quá trình đó.

Để có được số lượng luồng cho toàn bộ hệ thống, điều này đủ:

#!/bin/sh
count() {
    printf %s\\n "$#"
}
count /proc/[0-9]*/task/[0-9]*

Các cách tiếp cận này có vẻ hơi không chính thống ở chỗ chúng phụ thuộc nhiều vào các tính năng vỏ, nhưng bù lại cả hai đều nhanh hơn các cách tiếp cận tương ứng psawkdựa trên máy của tôi (trong khi cũng không tạo thêm các luồng riêng cho đường ống). Hãy nhớ rằng shell được khởi chạy để chạy các tập lệnh này sẽ có một luồng của riêng nó (hoặc hơn, nếu bạn đang sử dụng một triển khai lạ).

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.