Linux下获取线程TID的方法——gettid()

2023-10-28

2013-01-07 wcdj

如何获取进程的PIDprocess ID?

可以使用:

#include <unistd.h>
pid_t getpid(void);
通过查看头文件说明,可以得到更详细的信息:
find /usr/include -name unistd.h

/usr/include/asm/unistd.h
/usr/include/bits/unistd.h
/usr/include/linux/unistd.h
/usr/include/sys/unistd.h
/usr/include/unistd.h

cat /usr/include/unistd.h | grep getpid

/* Get the process ID of the calling process.  */
extern __pid_t getpid (void) __THROW;

如何获取线程的TID(thread ID)?

通过查看man得到如下描述:
(1) The gettid() system call first appeared on Linux in kernel 2.4.11.
(2) gettid() returns the thread ID of the current process. This is equal to the process ID (as returned by getpid(2)), unless the process is part of a thread group (created by specifying the CLONE_THREAD flag to the clone(2) system call). All processes in the same thread group have the same PID, but each one has a unique TID.
(3) gettid() is Linux specific and should not be used in programs that are intended to be portable. (如果考虑移植性,不应该使用此接口)

但是根据man的使用说明,测试后发现会报找不到此接口的错误“error: undefined reference to `gettid'”,通过下面链接可以找到更详细的说明:
http://www.kernel.org/doc/man-pages/online/pages/man2/gettid.2.html
(1) Glibc does not provide a wrapper for this system call; call it using syscall(2).(说明Glibc并没有提供此接口的声明,此接口实际使用的是系统调用,使用者可以自己创建包裹函数)
(2) The thread ID returned by this call is not the same thing as a POSIX thread ID (i.e., the opaque value returned by pthread_self(3)).

然后查看/usr/include/sys/syscall.h(实际在/usr/include/asm/unistd.h)可以找到我们需要的system call number:
#define __NR_gettid     224

因此,要获取某个线程的TID,最nasty的方式是:

#include <sys/syscall.h>
printf("The ID of this thread is: %ld\n", (long int)syscall(224));
或者比较elegant的方式是:
#include <sys/syscall.h>
#define gettidv1() syscall(__NR_gettid)
#define gettidv2() syscall(SYS_gettid)
printf("The ID of this thread is: %ld\n", (long int)gettidv1());// 最新的方式
printf("The ID of this thread is: %ld\n", (long int)gettidv2());// traditional form
PS: 在/usr/include/sys/syscall.h中可以看到关于__NR_<name>和SYS_<name>两个宏的区别,实际最后使用的都是__NR_<name>。
// /usr/include/bits/syscall.h
#define SYS_gettid __NR_gettid

#ifndef _LIBC
/* The Linux kernel header file defines macros `__NR_<name>', but some     
   programs expect the traditional form `SYS_<name>'.  So in building libc
   we scan the kernel's list and produce <bits/syscall.h> with macros for
   all the `SYS_' names.  */
# include <bits/syscall.h>
#endif


验证TID是否正确的方法:
查看进程pid
(1) ps ux | grep prog_name
(2) pgrep prog_name
查看线程tid
(1) ps -efL | grep prog_name
(2) ls /proc/pid/task



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux下获取线程TID的方法——gettid() 的相关文章

  • 因果相关的论文与算法

    跟causality相关的算法目录方便大家查找代码和论文 https github com rguo12 awesome causality algorithms 如何将因果推断 分析 和深度学习有机结合弥补两者的不足 有哪几个关键问题需要
  • Java编程的逻辑 (30) - 剖析StringBuilder

    本系列文章经补充和完善 已修订整理成书 Java编程的逻辑 由机械工业出版社华章分社出版 于2018年1月上市热销 读者好评如潮 各大网店和书店有售 欢迎购买 京东自营链接 http item jd com 12299018 html 上节
  • promise详解

    一 promise含义 Promise 是异步编程的一种解决方案 比传统的解决方案 回调函数和事件 更合理和更强大 它由社区最早提出和实现 ES6 将其写进了语言标准 统一了用法 原生提供了Promise对象 所谓Promise 简单说就是
  • poi 灵活导出excel(有这一篇即可~~~~)

    大家在开发项目的时候 但凡涉及数据多而杂的时候或多或少需要导出excel 用什么的工具类这时候就很烦恼了 接下来的工具类傻瓜式一键生成大家需要的excel 1 依赖 Apache POI是Apache软件基金会的开放源码函式库 POI提供A
  • 以太坊开发者常见的问题答案

    求职面试不仅是一种过滤掉不合格候选人的考验 对于候选人来说 这也是一个很好的机会 可以评估未来雇主的开发团队的优秀程度 如果你的面试官问的是原始的 蹩脚的或错误的问题 是的 他们会问你一些完全没有意义的事情 然后这是一个红旗 也许你应该重新
  • Error:Cannot build Artifact 'art_training:war exploded' because it is included into a circular depen

    今天在做项目弄项目的时候启动tomcat出现问题错误如下 Error Cannot build Artifact art training war exploded because it is included into a circula
  • 远程访问服务器Jupyter Notebook (浏览器访问和pycharm访问)

    1 在remote server上运行 jupyter notebook no browser port 8888 复制远程终端显示的 token 序列 2 在本地终端上运行 ssh L 8888 localhost 8888
  • Android中的DPI和PPI

    DPI是Android开发中的像素密度 PPI是Android手机物理像素密度 他们两者是完全没有关系的 千万不要把ppi的公式等同于dpi dpi是通过displayMetrics获取的 val densityDpi resources
  • 芯片开发语言:Verilog 在左,Chisel 在右

    来源 老石谈芯 在最近召开的RISC V中国峰会上 中科院计算所的包云岗研究员团队正式发布了名为 香山 的开源高性能处RISC V处理器 前不久我有幸和包老师就这个事情做了一次深度的交流 我们聊了关于RISC V 还有 香山 处理器的前世今
  • VS code Python使用:debug环境配置,日常使用技巧

    1 配置debug环境 1 1 步骤一 9步配置远程环境 成功解决 vscode远程调试python 如果单步跳过快捷键F10没有反应 可以 设置 键盘快捷方式 重新设置一遍 Debug 单步跳过 随便设一个键 然后再设置回 F10 拓展插
  • 算法_快速排序

    Python 快速排序 快速排序使用分治法 Divide and conquer 策略来把一个序列 list 分为较小和较大的2个子序列 然后递归地排序两个子序列 步骤为 挑选基准值 从数列中挑出一个元素 称为 基准 pivot 分割 重新
  • 【C语言】_8.数据的存储

    正文 1 数据类型介绍 前面我们已经了解到基本的内置类型 char 字符数据类型 1个字节 short 短整型 2个字节 int 整型 4个字节 long 长整型 4或8个字节 long long 更长的整型 8个字节 float 单精度浮
  • Android让EditText输入框真正失去焦点问题解决

    在显示一些记录的时候 不希望EditText有光标 也就是失去焦点 可以通过调用edittext clearFocus 来实现 但clearFocus 的会将焦点移到Activity的第一个View 如果不幸你的EditText就是第一个V

随机推荐

  • 由于找不到d3dx9_43.dll无法继续执行代码

    电脑提示由于找不到d3dx9 43 dll 无法继续执行代码如何修复呢 相信不少小伙伴遇到过这个问题 d3dx9 43 dll是Windows系统中重要的组件 缺失或者损坏都会导致很多游戏跟软件无法运行打开 小编今天就把修复教程分享给大家
  • java map取第一个元素_从HashMap获取第一个和最后一个元素

    6 个答案 答案 0 得分 3 首先 地图不是有序的 所以你不会真正拥有第一个和最后一个元素 但是 如果你想获得它的第一个和最后一个元素 你可以只获取值并将其转换为数组 这不是很漂亮 但它会起作用 Map result new HashMa
  • 有没有免费/便宜好用的云服务器推荐?

    国内各大云平台目前都处于拉新阶段 免费是有的 但是时间都有限 例如腾讯云个人注册新用户可以领取一个月的免费服务器 企业注册新用户可以领取6个月的免费服务器 虽然都是1核1G1M带宽的 但是对于熟悉云环境还是有一定的帮助 具体可前往腾讯云官网
  • 蓝桥杯嵌入式STM32G431——第十二届第一场省赛停车计费系统真题及代码

    1 第十二届第一场省赛真题 2 解题思路整理 本届赛题相较于往届赛题在串口部分有较为复杂的逻辑 想要解决还是需要下一番功夫的 首先除了串口模块 LED LCD 按键 PA7输出频率固定 占空比固定的PWM这些模块都是基本的套路比较简单 先把
  • C++模板*******

    模板是泛型编程的基础 泛型编程即以一种独立于任何特定类型的方式编写代码 模板是创建泛型类或函数的蓝图或公式 库容器 比如迭代器和算法 都是泛型编程的例子 它们都使用了模板的概念 每个容器都有一个单一的定义 比如 向量 我们可以定义许多不同类
  • 配置Win10解决VMware Intel VT-x虚拟化问题

    http jingyan baidu com article 4b52d702a3e0aafc5d774b7c html
  • mfc c语言串口通信,C++的MFC 串口通讯(转)

    修改了原作者的一些小笔误 完善了一下整个过程 本例程是在VS2010环境下 使用MFC做的是一个简单的串口通信程序 欢迎交流 1 首先 在VS2010环境下创建基于对话框的MFC应用程序 a 选择菜单项 文件 gt 新建 gt 项目 弹出新
  • 【MySQL】索引

    目录 一 索引的概念 二 前导理解 2 1 硬件方面 2 2 软件方面 2 3 建立共识 三 索引的理解 3 1 单个page 3 2 多个page 3 3 B 树 3 4 B 树的特征 3 5 聚簇索引与非聚簇索引 3 6 辅助索引 普通
  • 100+医学影像数据集集锦

    100 医学影像数据集集锦 linhandev 于 2021 11 06 18 41 38 发布 4654 收藏 97 文章标签 深度学习 计算机视觉 python 图像处理 机器学习 版权 医学影像数据集集锦 前言 本项目的目标是整理一个
  • php使用smtp发送邮件,php使用smtp发送邮件

    include class phpmailer php 包含phpmailer类 mail new PHPMailer 建立邮件发送类 mail gt IsSMTP 设定使用SMTP方式寄信 mail gt CharSet gb2312 邮
  • freemark生成pdf

    freemark生成pdf 字体库 simsun ttc 解决中文问题 生成pdf param params param templPath param ftlName param htmlPath param pdfPath param
  • d3d制作场景地形

    一般可以先用d3d做地形的mesh 比如做一个100 100的网格 然后用photoshop做高度图 然后再程序里读取高度图数据 让mesh的每个顶点对应一个高度 http download csdn net source 855296 这
  • Backdrop Filter

    CSS 滤镜 backdrop filter backdrop filter属性允许我们使用css对元素后面的内容应用过滤效果 滤镜 名称 方法案例 效果 blur 模糊 blur 5px brightness 亮度 brightness
  • 启动失败java.lang,java.lang.RuntimeException:启动失败

    I am trying to record audio in one of my Activities using MediaRecorder Part of the code is shown below File file new Fi
  • 2021-01-15

    文章目录 SQL server基础学习5 查询 重点和难点 续 8 模糊查询 9 聚合函数 SQL server基础学习5 查询 重点和难点 续 8 模糊查询 定义 在对所需条件不太了解时将匹配条件的所有可能给查询出来 例如 我想找一个人
  • webgl 裁剪空间 投影矩阵 透视除法 Z值反转 鼠标点击位置求射线

    webgl 裁剪空间 投影矩阵 透视除法 Z值反转的讲解 右手坐标系Z值转换为深度值的过程理解 透视投影的输出结果一屏幕方向理解 朝向屏幕里为1 屏幕朝外为 1 投影矩阵的裁剪是剔除Z值不在 1到1区间的坐标 此时的 1 和深度缓冲的0对应
  • 一文读懂高速互联的阻抗及反射

    一文读懂高速互联的阻抗及反射 一文读懂高速互联的阻抗及反射 何为电阻 何为阻抗 何为特性阻抗 无损传输线 PCB上的传输线的特性阻抗 一文读懂高速互联的阻抗及反射 自建号 2021年1月1日 以来 已经过去了相当长的时间 当初暗自定下的更新
  • RM奖励模型用到的Elo评分系统

    你现在是大学教授 请详细讲述Elo排名 用公式表示 二 积分计算公式 Ra A玩家当前的Rating Rb B玩家当前的Rating Sa 实际胜负值 胜 1 平 0 5 负 0 Ea 预期A选手的胜负值 Ea 1 1 10 Rb Ra 4
  • Springboot + Mybatis 同时支持多类数据库SQL的解决方案

    pg Oracle MySQL 的字符串转日志函数不同 可通过 databaseId 来判断该执行哪段SQL 多余的代码就不写上了 直接根据下列代码就能理解
  • Linux下获取线程TID的方法——gettid()

    2013 01 07 wcdj 如何获取进程的PID process ID 可以使用 include