如何从pthread获取pid

发布于 2024-12-02 14:57:41 字数 92 浏览 0 评论 0原文

在RH Linux中,每个pthread都映射到一个pid,可以通过htop等工具进行监控。但我怎样才能获得线程的pid呢? getpid() 只是返回主线程的 pid。

in RH Linux, every pthread is mapping to a pid, which can be monitored in tools such as htop. but how can i get the pid of a thread? getpid() just return the pid of the main thread.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

温柔戏命师 2024-12-09 14:57:41

有两个线程值容易混淆。 pthread_self() 将返回 POSIX线程 ID; gettid() 将返回操作系统线程 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);
   }

There are two thread values that get confused. pthread_self() will return the POSIX thread id; gettid() will return the OS thread id. The latter is linux specific and not guaranteed to be portable but probably what you are really looking for.

EDIT As PlasmaHH notes, gettid() is called via syscall(). From the syscall() man page:

   #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);
   }
滥情空心 2024-12-09 14:57:41

pthread_self();

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

另外PID是进程ID,线程有线程ID而不是PID。同一进程中运行的所有线程都将具有相同的 PID。

pthread_self();

Can be called to return the ID of the calling thread.

Also PID is process Id, A thread has thread Id not PID. All threads running in the same process will have the same PID.

深居我梦 2024-12-09 14:57:41

PID 是进程 ID,而不是线程 ID。运行在同一进程上的线程显然都与相同的 PID 相关联。

由于 pthreads 试图实现可移植,因此您无法直接获取底层操作系统线程的 ID。甚至有可能没有底层操作系统线程。

A PID is a Process ID, not a thread ID. Threads running on the same process will obviously all be associated with the same PID.

Because pthreads tries to be portable you cannot obtain the ID of the underlying OS thread directly. It's even possible that there isn't an underlying OS thread.

时光匆匆的小流年 2024-12-09 14:57:41

pthread_self 没有获取tid。它提供 pthread_t 类型的句柄或指针以供 pthread 函数使用。

请参阅此处,了解现实世界程序可能返回的示例:

http://www.c- plusplus.de/forum/212807-full

pthread_self does not get the tid. it proviedes a handle or pointer of type pthread_t for usage in pthread functions.

see here for an example what a real world program might return:

http://www.c-plusplus.de/forum/212807-full

很快妥协 2024-12-09 14:57:41

实际上,pthread_self 返回 pthread_t 而不是您可以使用的整数线程 ID,以下辅助函数将以跨不同 POSIX 系统的可移植方式为您提供该 ID。

uint64_t gettid() {
    pthread_t ptid = pthread_self();
    uint64_t threadId = 0;
    memcpy(&threadId, &ptid, std::min(sizeof(threadId), sizeof(ptid)));
    return threadId;
}

Actually pthread_self return pthread_t and not a integer thread id you can work with, the following helper function will get you that in a portable way across different POSIX systems.

uint64_t gettid() {
    pthread_t ptid = pthread_self();
    uint64_t threadId = 0;
    memcpy(&threadId, &ptid, std::min(sizeof(threadId), sizeof(ptid)));
    return threadId;
}
鸢与 2024-12-09 14:57:41

线程有tids(threadIds),所有线程都运行在同一个进程(pid)中。因此,假设您的线程是在同一进程中创建的,则它们应该具有相同的 pid,但它们将具有不同的 pid。

pthread_self() 给出 tid,getpid() 获取 pid。

Threads have tids (threadIds), and all threads run in the same process (pid). So, your threads should all have the same pid assuming they're created in the same process, bu they'll have different tids.

pthread_self() gives tid, and getpid() gets the pid.

尽揽少女心 2024-12-09 14:57:41

我认为您正在寻找的功能是 pthread_self

I think the function you are looking for is pthread_self

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文