2010-07-20 19 views

Trả lời

9

Bạn có thể tìm trong /proc/<PID>/task/ (trong đó <PID> là một ID quá trình) sẽ có một số thư mục con, mỗi tên có cùng tên chuỗi của một trong các chủ đề trong tác vụ đó. Lưu ý rằng đây chỉ là loại thời gian thực mặc dù - trừ khi bạn "đóng băng" toàn bộ hệ thống trong suốt thời gian, thông tin bạn nhận được luôn có thể cũ, bởi vì một quá trình có thể tạo hoặc hủy các chủ đề thậm chí khi bạn đang xem dữ liệu.

3

Tôi đoán ps -L nên thực hiện thủ thuật.

Đây là ps .

Không chắc chắn nếu bạn hỏi cách thực hiện chương trình đó, nhưng trong trường hợp này, vì ps là nguồn mở nên bạn có thể xem các nguồn.

+0

yes programmaticaly –

+0

Không chắc chắn về ngôn ngữ tôi sẽ triển khai. –

+0

Tôi chắc chắn rằng bất kỳ ngôn ngữ nào bạn thực hiện sẽ có khả năng gọi 'ps'. – corsiKa

4

Trong các chủ đề Linux hiện đại, rất giống các quy trình. Mỗi luồng có một định danh LWP ("quá trình trọng lượng ánh sáng"), được thực hiện bên trong như PID. Tuy nhiên, nếu như "quá trình trọng lượng nhẹ" (tức là thread) được truy vấn cho một PID, hệ thống sẽ sinh ra PID của quá trình sinh ra luồng (thay vì LWP). Cũng lưu ý rằng nếu quá trình chỉ có một luồng, thì LWP sẽ bằng với PID của nó.

ps có khả năng xử lý chuỗi với -L công cụ sửa đổi, như ereOn được mô tả trong số answer của mình. Nhưng tôi nên lưu ý rằng ps không chỉ dành cho yêu cầu thủ công. Nó có khả năng in đầu ra theo cách dễ dàng phân tích cú pháp bằng chương trình khác.

Lệnh sau sẽ in LWPs (-o lwp=) và PID (-o pid=) của tất cả (-A) chủ đề (-L) trong hệ thống. Mỗi chuỗi đại diện cho một luồng, cột thứ hai là quá trình sinh ra nó:

$ ps -A -L -o lwp= -o pid= 
... 
27747 27747 
27749 27749 
27750 27750 
27751 27750 
27752 27750 
27755 27750 
27756 27750 
27772 27772 
27858 27858 
30457 30457 
30886 30886 

Khá dễ dàng để phân tích cú pháp với C hoặc C++, phải không? Để thực sự đọc điều này từ chương trình của bạn, bạn có thể sử dụng popen hoặc một trong số C++ equivalents của nó.

Lưu ý rằng việc sử dụng ps không chỉ dễ dàng hơn việc đọc /proc. Nó cũng an toàn hơn nhiều so với việc phân tích cú pháp thủ công hệ thống tệp /proc. ps là lệnh POSIX *, đảm bảo hoạt động; nó sử dụng /proc trong Linux, nhưng đó là chi tiết nội bộ. Khi thay đổi cơ sở hạ tầng cơ bản, ps sẽ được viết lại và sẽ tiếp tục hoạt động, trong khi mã của bạn, nếu được viết dựa trên /proc, sẽ bị hỏng.


* Thành thật mà nói, POSIX không chỉ định công tắc -L. Nhưng trong bất kỳ Linux, có GNU toolchain, nó sẽ có sẵn.

Các vấn đề liên quan