所以在htop
中,我看到一个非常糟糕的线程消耗了其中一个核心的70%。
我想将我的应用程序逻辑映射到执行它的线程pid
Network read pid 22882
Network write pid 22874
所以我想知道如何从中获取执行线程的pid?
要创建一个线程,我使用boost::thread
答案 0 :(得分:2)
使用getpid()
获取pid
。使用gettid()
获取tid
(线程ID)。
getpid()返回调用进程的进程ID
gettid()返回调用者的线程ID(TID)。在单线程进程中,线程ID等于进程ID(PID,由getpid(2)返回)。在多线程进程中,所有线程都具有相同的PID,但每个线程都有一个唯一的TID。
答案 1 :(得分:1)
您可以从主题中调用getpid()函数。
答案 2 :(得分:1)
线程linux进程有
(1)流程中所有线程共享的OS pid - 使用getpid
(2)进程中的每个线程都有自己的操作系统线程ID - 使用gettid
(3)在进行各种与pthread相关的调用时,pthreads内部使用的pthreads线程id来识别线程。
您对htop
感兴趣的值为(2),因此您需要使用gettid
来显示它。
gettid
目前没有调用包装器,因此您必须通过syscall
访问它。下面的代码是gettid
手册页中的示例。请注意,在此程序中,pid和tid将是相同的,因为它是单线程程序。
#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);
}
答案 3 :(得分:0)
您可以使用pthread_self()
(http://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread_self.html)从线程获取线程标识符...但是由于进程可以有多个线程,因此所有线程都将报告相同的pid(使用{ {3}})......