所以在htop
我看到一個非常糟糕的線程從一個內核中消耗了70%。如何從C++代碼獲得linux上的線程pid?
而且我想我的應用程序邏輯映射到線程執行PID它說
Network read pid 22882
Network write pid 22874
所以我不知道如何從它那裏得到執行的線程的PID?
要創建一個線程我用boost::thread
所以在htop
我看到一個非常糟糕的線程從一個內核中消耗了70%。如何從C++代碼獲得linux上的線程pid?
而且我想我的應用程序邏輯映射到線程執行PID它說
Network read pid 22882
Network write pid 22874
所以我不知道如何從它那裏得到執行的線程的PID?
要創建一個線程我用boost::thread
您還可以從線程getpid()功能。
可以使用pthread_self()
(http://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread_self.html)得到線程的線程標識符......然而,由於一個進程可以擁有多個線程,所有的線程將報告相同的PID(使用http://linux.die.net/man/3/getpid)...
使用getpid()
得到pid
。使用gettid()
可獲得tid
(線程ID)。
GETPID()返回調用進程的進程ID
gettid()返回調用者線程ID(TID)。在單線程進程中,線程ID等於進程ID(PID,由getpid(2)返回)。在多線程進程中,所有線程都具有相同的PID,但每個線程都有唯一的TID。
螺紋linux進程具有
(1)的OS PID由過程中的所有線程共享 - 使用getpid
(2)的過程中的每個線程有其自己的OS線程id - 使用gettid
(3)pthreads線程ID用於在進行各種與pthread相關的調用時通過pthreads來標識線程。
您對htop
感興趣的值是(2),因此您需要使用gettid
來顯示它。
目前沒有gettid
的呼叫封裝,因此您必須通過syscall
訪問它。以下代碼是gettid
手冊頁中的一個示例。請注意,在此程序中,pid和tid將是相同的,因爲它是單線程程序。
#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
int
main(int argc, char *argv[])
{
pid_t tid;
tid = syscall(SYS_gettid);
}
使用'gettid'得到'tid' THEAD – sujin