linux獲取執行緒id的方法學習

2021-06-20 01:00:30 字數 1037 閱讀 5649

最近一直在想:

如何確認兩段**是不是在同乙個執行緒中執行的呢?

通過檢視資料,發現一種比較簡單的方法就是在**中使用printf將當前執行緒的id列印出來。

而這也分成兩種情況:

1. 如果是pthread,則使用,

#include

pthread_t pthread_self(void);

2. 如果不是pthread,即是由核心建立的執行緒,則使用,

#include

pid_t gettid(void);

獲取執行緒所在的程序的id,方法如下:

#include

#include

pid_t getpid(void);

pid_t getppid(void);

所以,我們在**中使用如下的語句列印:

printf("\ntid=%lu, pid=%lu\n", gettid(), getpid());

這樣就能獲取當前**所在的執行緒和程序了。

根據列印出來的程序的pid,獲取程序名的方法是:

ls -lh /proc/pid/exe

lrwxrwxrwx 1 root root 0 jan  1 20:48 /proc/pid/exe -> ...

sh-3.2#

檢視thread id的方法有:

1. sh-3.2# ps -efl | grep process,

ps命令指定-l命令選項可以用來檢視程序下所包含的所有執行緒。

2. sh-3.2# ls -l /proc/pid/task/

檢視程序下當前有哪些task,這些task指的就是執行緒。

測試所遇到的實際狀況:

1. 執行後發現兩個執行緒雖然是同屬於乙個程序,但是使用如上兩種方法檢視執行緒時只能看到其中乙個執行緒。

猜測是另乙個執行緒已經退出了?有空時可以再確認一下。

2. 呼叫gettid()會出現編譯錯誤,其原因是gettid是乙個系統呼叫,在glibc中沒有對應的庫函式。

使用者如果有需要,可以直接呼叫gettid所對應的系統呼叫。

Linux下獲取執行緒ID的方法

linux下多執行緒程式發生coredump時,用 gdb path to program file core 可以看到所有執行緒 root rubic test thread gdb a.out core gnu gdb gdb 7.6.1 license gplv3 gnu gpl versio...

linux 下獲取執行緒ID

linux多執行緒環境下gettid pthread self 兩個函式都獲得執行緒id,但這2個id有所不同 gettid是核心中的執行緒的id posix thread id可以在乙個程序內唯一標識乙個執行緒,但如果放到系統範圍內的話就得用gettid了。include 需要包含這個標頭檔案in...

c 獲取執行緒id 高效獲取當前執行緒的 id

可以利用微軟提供的 api,輕鬆獲取當前執行緒的 id int id getcurrentthreadid linux 平台一般用的是 pthread 執行緒庫,但它並不提供獲取執行緒內部 id 的方法。可以通過系統呼叫得到當前執行緒的 id include for syscall include ...