2009-04-22 18 views
38

Tôi có một ứng dụng Linux đa luồng được viết bằng C/C++. Tôi có chosen names for my threads. Để hỗ trợ gỡ lỗi, tôi muốn các tên này hiển thị trong GDB, "trên cùng", v.v. Có phải điều này có thể và nếu có thì làm cách nào?Làm cách nào để đặt tên cho một chuỗi trong Linux?

(Có rất nhiều reasons to know the thread name. Ngay bây giờ tôi muốn biết chuỗi nào đang chiếm 50% CPU (như được báo cáo bởi 'trên cùng'). Và khi gỡ lỗi, tôi thường cần chuyển sang một chuỗi khác - hiện tại tôi có để thực hiện "thread apply all bt", sau đó xem qua các trang của đầu ra theo dõi ngược để tìm đúng chuỗi).

Windows solution is here; Linux là cái gì?

+0

Câu hỏi liên quan: http://stackoverflow.com/questions/5026531/thread-name-longer-than-15-chars – user9876

Trả lời

41

Chủ đề Posix?

Điều này rõ ràng sẽ không biên dịch, nhưng nó sẽ cho bạn ý tưởng về nơi để đi săn bắn. Tôi thậm chí không chắc chắn của nó phải PR_ lệnh, nhưng tôi nghĩ rằng nó được. Nó được một thời gian ...

#include <sys/prctl.h> 
    prctl(PR_SET_NAME,"<null> terminated string",0,0,0) 
+6

Điều đó có hiệu quả, cảm ơn! Tài liệu nói PR_SET_NAME đặt tên quy trình; nhưng tài liệu đó sai - nó thực sự đặt tên luồng. Bây giờ "top" và "ps -L" hiển thị tên luồng. – user9876

+0

Rất vui khi nó hoạt động, tôi không chắc chắn nếu nó là ngay cả Constant cho nó, :) – Fusspawn

+0

Tôi đã luôn luôn xác định chủ đề dựa trên chức năng bắt đầu như được hiển thị trong ngăn xếp của thread. Rất vui khi biết có một giải pháp thay thế sạch sẽ. – veefu

14

Nếu bạn đang sử dụng một thư viện như ACE các Thread có một cách để chỉ định tên chủ đề khi tạo một chủ đề mới.

BSD Unix cũng có một cuộc gọi pthread_set_name_np.

Nếu không, bạn có thể sử dụng prctl như đã đề cập bởi Fusspawn.

+9

Trên Linux, nó được gọi là 'pthread_setname_np' và nó được thêm vào trong glibc 2.11.2. – Nemo

+2

[This] (http://stackoverflow.com/questions/2369738/can-i-set-the-name-of-a-thread-in-pthreads-linux) là, có lẽ, câu trả lời chi tiết nhất về môn học. –

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