如何使用Linux glibc获取LWP?

Jor*_*rge 1 c c++ linux

我在Linux机器(Ubuntu)上开发了一些带有一些线程的进程.我想知道如果PID和PPID对于进程的所有线程总是相同的,我怎么能从每个线程(使用glibc函数)获得LWP.

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
Run Code Online (Sandbox Code Playgroud)

Abo*_*our 5

使用手册页中的gettid():

描述
gettid()返回调用者的线程ID(TID).在单线程进程中,线程ID等于进程ID(PID,由getpid(2)返回).在多线程进程中,所有线程都具有相同的PID,但每个线程都具有唯一的TID.有关更多详细信息,请参阅clone(2)中对CLONE_THREAD的讨论.

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

  • 不幸的是,我在尝试 gettid() 时收到一条错误消息:对“gettid”的未定义引用。经过几个小时的研究,我发现并测试了一个真正有效的多平台解决方案: PlatformThreadId GetCurrentThreadId(void) { #if Defined(__APPLE__) return mach_thread_self(); #elif 定义(_LINUX) #ifdef __NR_gettid 返回系统调用(__NR_gettid); #否则返回(getpid()); #endif #endif } (2认同)