2009-04-22 26 views
38

我有一個用C/C++編寫的多線程Linux應用程序。我有chosen names for my threads。爲了幫助調試,我希望這些名稱在GDB,「top」等中可見。這是可能的,如果是這樣,怎麼辦? (現在有很多reasons to know the thread name。現在我想知道哪個線程佔用了50%的CPU(由'top'報告)。而且在調試時我經常需要切換到不同的線程 - 目前我有做「thread apply all bt」然後查看回溯輸出的頁面以找到正確的線程)。如何在Linux中命名一個線程?

The Windows solution is here;什麼是Linux?

+0

相關問題:http://stackoverflow.com/questions/5026531/thread-name-longer-than-15-chars – user9876 2011-05-19 14:58:25

回答

41

Posix線程?

這顯然不會編譯,但它會讓你知道去哪裏打獵。我甚至不確定它的正確PR_命令,但我認爲它是。它已經有一段時間...

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

這工作,謝謝!文檔說PR_SET_NAME設置進程名稱;但該文檔是錯誤的 - 它確實設置了線程名稱。現在「top」和「ps -L」顯示線程名稱。 – user9876 2009-04-22 17:39:27

+0

很高興它的工作,我不能肯定,如果它甚至是正確的,它,:) – Fusspawn 2009-04-22 17:53:51

14

如果您使用的是像ACEThread有辦法創建一個新線程時指定線程名庫。

BSD Unix還有一個pthread_set_name_np調用。

否則,您可以使用Fusspawn提到的prctl

相關問題