Linux下獲取執行緒TID的方法

2021-09-08 11:16:41 字數 1604 閱讀 9651

如何獲取程序的pid(process id)?

可以使用:

#include 

pid_t getpid(void);  

通過檢視標頭檔案說明,可以得到更詳細的資訊:

find /usr/include -name unistd.h  

/usr/include/asm/unistd.h  

/usr/include/bits/unistd.h  

/usr/include/linux/unistd.h  

/usr/include/sys/unistd.h  

/usr/include/unistd.h  

cat /usr/include/unistd.h | grep getpid  

/* get the process id of the calling process.  */  

extern __pid_t getpid (void) __throw;  

如何獲取執行緒的tid(thread id)?

#include 

printf("the id of this thread is: %ld\n", (long int)syscall(224));  

或者比較elegant的方式是:

#include 

#define gettidv1() syscall(__nr_gettid)  

#define gettidv2() syscall(sys_gettid)  

printf("the id of this thread is: %ld\n", (long int)gettidv1());// 最新的方式  

printf("the id of this thread is: %ld\n", (long int)gettidv2());// traditional form  

ps: 在/usr/include/sys/syscall.h中可以看到關於__nr_和sys_兩個巨集的區別,實際最後使用的都是__nr_。

// /usr/include/bits/syscall.h  

#define sys_gettid __nr_gettid  

#ifndef _libc  

/* the linux kernel header file defines macros `__nr_', but some      

programs expect the traditional form `sys_'.  so in building libc 

we scan the kernel's list and produce with macros for 

all the `sys_' names.  */  

# include 

#endif  

驗證tid是否正確的方法:

檢視程序pid

(1) ps ux | grep prog_name

(2) pgrep prog_name 

檢視執行緒tid

(1) ps -efl | grep prog_name

(2) ls /proc/pid/task

執行緒的handle和tid

執行緒是cpu分配時間執行任務的最小單位。在linux中,核心並沒有執行緒和程序的概念,所謂執行緒,只是可以和其他兄弟執行緒共享資源的程序。在posix中,pthread create建立執行緒,並將執行緒的handle或者說id傳遞給第乙個引數,在這還是稱其為handle。這個handle與pth...

linux 下獲取執行緒ID

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

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...