C++ 如何使用Linux glibc获取LWP?

C++ 如何使用Linux glibc获取LWP?,c++,c,linux,C++,C,Linux,我在Linux机器(Ubuntu)上用一些线程开发了一个进程。我想知道如何从每个线程(使用glibc函数)获得LWP,只要进程的所有线程的PID和PPID始终相同 UID PID PPID LWP C NLWP STIME TTY TIME CMD root 2588 2587 2588 0 11 00:05 ? 00:00:07 ./testsrv root 2588 2587 2589 2 11 0

我在Linux机器(Ubuntu)上用一些线程开发了一个进程。我想知道如何从每个线程(使用glibc函数)获得LWP,只要进程的所有线程的PID和PPID始终相同

UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
root      2588  2587  2588  0   11 00:05 ?        00:00:07 ./testsrv
root      2588  2587  2589  2   11 00:05 ?        00:23:17 ./testsrv
root      2588  2587  2590  0   11 00:05 ?        00:00:00 ./testsrv
root      2588  2587  2591  0   11 00:05 ?        00:00:03 ./testsrv
root      2588  2587  2592  0   11 00:05 ?        00:00:00 ./testsrv
root      2588  2587  2593  0   11 00:05 ?        00:00:00 ./testsrv
root      2588  2587  2594  0   11 00:05 ?        00:05:05 ./testsrv
root      2588  2587  2595  0   11 00:05 ?        00:00:00 ./testsrv
root      2588  2587  2596  0   11 00:05 ?        00:00:37 ./testsrv
root      2588  2587  2597  0   11 00:05 ?        00:00:00 ./testsrv
root      2588  2587  2601  0   11 00:05 ?        00:00:00 ./testsrv
使用手册页中的getId():

说明
gettid()返回调用方的线程ID(TID)。在单线程中 进程,线程ID等于进程ID(PID,由 getpid(2))。在多线程进程中,所有线程都具有相同的PID, 但每一个都有一个独特的TID。有关更多详细信息,请参阅讨论 克隆(2)中克隆线程的数目

返回值
成功时,返回调用进程的线程ID

使用手册页中的getId():

说明
gettid()返回调用方的线程ID(TID)。在单线程中 进程,线程ID等于进程ID(PID,由 getpid(2))。在多线程进程中,所有线程都具有相同的PID, 但每一个都有一个独特的TID。有关更多详细信息,请参阅讨论 克隆(2)中克隆线程的数目

返回值
成功时,返回调用进程的线程ID


LWP代表轻量工艺:指螺纹。我想你应该试着让线程IDLWP代表轻量级进程:意味着线程。我猜您试图获取线程ID。不幸的是,我在尝试getId()时收到一条错误消息:未定义对“getId”的引用。经过几个小时的研究,我发现并测试了一个真正有效的多平台解决方案:PlatformThreadId GetCurrentThreadId(void){如果定义(APPLE)return mach_thread_self();#elif defined(_LINUX)#ifdef_unr_getId return syscall(u NR_getId)#否则返回(getpid())##endif##endif#手册页中的相同内容:#定义#GNU#源代码#包含#包含#包含int main(int argc,char*argv[]){pid#t tid=syscall SYS\u gettid);}不幸的是,我在尝试getid()时收到了一条错误消息:未定义对“getId”的引用。经过几个小时的研究,我发现并测试了一个真正有效的多平台解决方案:PlatformThreadId GetCurrentThreadId(void){如果定义(APPLE)return mach_thread_self();#elif defined(_LINUX)#ifdef_unr_getId return syscall(u NR_getId)#否则返回(getpid())##endif##endif}手册页中的相同内容:#定义#GNU#源代码#包含#包含#包含int main(int argc,char*argv[]){pid_tid;tid=syscall(SYS#gettid)}