c++ - Linux进程ID和线程ID

标签 c++ c linux process pthreads

假设我们有很多用户进程在 Linux 上运行。每个进程都有许多线程在运行。

我可以通过调用getpid()来获取进程ID,它的返回值是一个整数。

我可以通过调用 pthread_self() 获取线程 ID,它的返回值是一个名为 pthread_t 的不透明类型。

现在我需要在共享内存中存储进程ID(一个int,一般是4字节)和线程ID(pthread_t,需要弄清楚多少字节),以便以后使用两条 ID 信息,用于识别特定线程并检查线程是否仍在运行。

我发现许多在线资源将 pthread_t 转换为 unsigned intunsigned long。由于我不想在转换过程中丢失任何数据,我应该如何处理 pthread_t 数据,使其成为固定大小的数据(如前所述,我需要将线程信息存储在共享内存)。

另外,我以后应该如何通过进程 ID 和线程 ID 的组合来识别特定线程?如何判断线程是否还在运行?

最佳答案

如果要存储pid_tpthread_t在任何地方,您都应该使用它们各自的类型(即“pid_t”和“pthread_t”)。所以如果你想把它们存储在某个地方的共享内存中,做一个 memcpy()把他们带到那里。

至于通过 PID 和 TID 的组合来识别特定线程,请参阅 Nemo 的评论。

如果您确实假设它们会存在,您可以让您的程序查看 /proc找到合适的 pid 目录,并在 /proc/<pid>/task 中查找对于线程。

关于c++ - Linux进程ID和线程ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8565880/

相关文章:

c - 变量声明的行为如何?

python - 选择不适用于 python 中的管道?

Linux 从 hibernate/挂起唤醒的命令

linux - 是否可以在没有 root 的情况下在 CentOS 上安装 g++?

c++ - 在哪里定义嵌套类的函数?

c++ - 程序不会在 exit() 函数之前打印行?

c++ - 专门化模板成员函数 [SFINAE]

C++ CLI System.String^ 到 MFC LPCTSTR

c - 使用时间为 C 中的随机化器播种循环

c - 当内存非常低时,线程内的 srand() 会导致堆栈溢出