我看到在htop的树模式下,我的多线程程序有几个进程。我知道它们是线程ID。但是这个id与pthread_create函数返回的线程id不匹配。
int _id = pthread_create(&m_iAudioThreadID, NULL, AudioRecvThread, this);
m_iAudioThreadID
是否应该等于我们在htop的树模式中看到的进程的PID?但事实并非如此。如何从程序中以编程方式找到htop的PID?谢谢
m_iAudioThreadID是否应该等于我们在进程的htop树模式中看到的PID?
不,他们不是。htop
显示了进程ID、PID。pthread_create()
设置的线程ID不同:Linux 中进程和线程之间的区别
一个主要区别是PID唯一地标识系统的现有进程中的进程,而PThread ID唯一地标识进程的现有线程中的线程。
如何从程序中以编程方式找到htop的PID?
至少在最近的Linux上:要获得与某个PThread关联的PID,请从有问题的线程中使用gettid()
系统调用:
#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
pid_t gettid(void)
{
return syscall(SYS_gettid);
}
(灵感来自http://man7.org/linux/man-pages/man2/syscall.2.html)