如何从pthread获取pid

Sha*_*awn 11 c++ linux pthreads

在RH Linux中,每个pthread都映射到pid,可以在htop等工具中监视它.但我怎么能得到线程的pid?getpid()只返回主线程的pid.

Duc*_*uck 25

有两个线程值混淆. pthread_self()将返回POSIX线程id; gettid()将返回OS线程ID.后者是特定于Linux的,并不保证是可移植的,但可能是你真正想要的.

编辑正如PlasmaHH所说,gettid()被称为通过syscall().从syscall()手册页:

   #define _GNU_SOURCE
   #include <unistd.h>
   #include <sys/syscall.h>
   #include <sys/types.h>

   int
   main(int argc, char *argv[])
   {
       pid_t tid;

       tid = syscall(SYS_gettid);
   }
Run Code Online (Sandbox Code Playgroud)


Alo*_*ave 6

pthread_self();

可以调用以返回调用线程的ID.

PID也是进程Id,线程有线程Id而不是PID.在同一进程中运行的所有线程将具有相同的PID.

  • Als the downvote是因为你说的是​​错的.Linux线程实际上可以用pid表示,因为它们是轻量级进程.实际上Linux unistd.h中存在以下函数:pid_t gettid(void).另一方面,Windows具有真正独立的线程ID. (17认同)