我已经看到在 htop 的树模式下,我的多线程程序下有几个进程。我知道它们是线程 ID。但是这个 id 与 pthread_create 函数返回的线程 id 不匹配。
int _id = pthread_create(&m_iAudioThreadID, NULL, AudioRecvThread, this);
是否m_iAudioThreadID
应该等于我们在 htop 的树模式中看到的进程的 PID?但它没有。如何从我的程序中以编程方式找到 htop 的 PID?谢谢。
我已经看到在 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-IDpthread_create()
不同: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);
}