在描述執行緒id和程序id之前我們先來分清楚幾個概念:
1. 使用者級執行緒和核心級執行緒
什麼是使用者級執行緒?
使用者級執行緒核心的切換由使用者態程式自己控制核心切換,不需要核心干涉,少了進出核心態的消耗,但不能很好的利用多核cpu,目前linux pthread大體是這麼做的。執行緒組id?
執行緒組的id和主線程id保持一致執行緒組的特點?
執行緒組內的第乙個執行緒,在使用者態被稱為主線程(main thread),在核心中被稱為group leader。下來我們通過例項來看一下執行緒id和程序id以及執行緒組核心在建立第乙個執行緒時,會將執行緒組的id的值設定為第乙個執行緒的執行緒id,group_leader指標則指向自身,即主線程的程序描述符。
即執行緒組內存在乙個執行緒,執行緒id等於程序id,該執行緒被稱為主線程。
4. 獲取執行緒id函式
核心級執行緒id ——syscall()
#include
pid_t tid;
tid = syscall(sys_gettid);
使用者態執行緒id ——-pthread_self()
#include
pthread_t pthread_self(void);
返回值:成功返回0,失敗返回錯誤碼
例項:
#include
#include
#include
#include
#include
#include
void* thread_run(void* arg)
}int main()
while(1)
return
0;}
結果:程序id、使用者級執行緒id、核心級執行緒id
執行緒組id
linux下程序名和程序id的轉換
1.由程序名得到程序id pidof xx 其中xx是程序名 2.由程序id得到程序名 readlink proc exe,其中 是程序的id 3.如果是shell程式,因為shell的程序名是相應的shell名,所以不能直接根據shell指令碼的名字來獲取其程序id,可以由以下兩種方法 以sh為例...
linux 執行緒id 與程序id對應關係
linux 中的執行緒是基於程序實現的,每個執行緒都會有乙個程序對應,通過gettid 可以獲取到該程序id。另外,通過pthread self 獲取到的是posix thread id。下面簡單舉個例子。include include include include include include...
linux 下獲取執行緒ID
linux多執行緒環境下gettid pthread self 兩個函式都獲得執行緒id,但這2個id有所不同 gettid是核心中的執行緒的id posix thread id可以在乙個程序內唯一標識乙個執行緒,但如果放到系統範圍內的話就得用gettid了。include 需要包含這個標頭檔案in...