author:张继飞

项目中寻找bug经常会用到gettid(),来获取线程号,判断问题出在哪个线程里面。对于gettid先来man一下。

GETTID(2)                  Linux Programmer's Manual                 GETTID(2)

NAME
       gettid - get thread identification

SYNOPSIS
       #include <sys/types.h>
       #include <linux/unistd.h>
       #include <errno.h>

_syscall0(pid_t, gettid)
               /* Using syscall(2) may be preferable; see intro(2) */

pid_t gettid(void);

DESCRIPTION
       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.

RETURN VALUE
       On success, returns the thread ID of the current process.

ERRORS
       This call is always successful.

CONFORMING TO
       gettid() is Linux specific and should not be used in programs that are intended to be portable.

SEE ALSO
       clone(2), fork(2), getpid(2)

Linux 2.4.20                      2003-02-01                         GETTID(2)、

应用中,使用上面的头文件可能会出现诸如这样的error: undefined reference to `gettid'

我们可以自已定义实现方法,如下:

#include <sys/syscall.h> /*此头必须带上*/

pid_t gettid()
{
     return syscall(SYS_gettid);  /*这才是内涵*/
}

然后使用的时候直接printf("\n%s Thread id : gettid() == %d\n",__FUNCTION__,gettid()); 便可查阅当前thread ID。

我的项目中thread ID都是顺序下来的,进程也即主线程ID为45,然后分别创建了4个子线程,其按照创建顺序,分配的ID分别为46,47,48,49。

下面说下使用命令查看thread ID。

# pgrep test   /*test为正在运行的application*/

45            /*此为进程PID也即主线程ID,二者相同*/

所有进程PID都能在/proc下看到,ls /proc 的话,所有数字都代表一个进程,下一步

# ls /proc/45/task/  
45  46  47  48  49  /* ok 该进程下的所有thread  ID都展现在我们眼前了*/

end

获取线程号 gettid()【原创】相关推荐

  1. linux下获取线程号

    #include <sys/syscall.h> pid_t gettid() {return syscall(SYS_gettid); } 转载于:https://www.cnblogs ...

  2. linux C语言如何获取进程号和线程号?getpid()、syscall(__NR_gettid)

    有些时候,需要在Log中打出进程或线程的ID,以便调试.查找问题. 获取进程ID #include <unistd.h> pid_t getpid(void); 获取线程ID // 方法1 ...

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

    如何获取进程的PID(process ID)? 可以使用: #include <unistd.h> pid_t getpid(void); 通过查看头文件说明,可以得到更详细的信息: fi ...

  4. ceph bluestore源码分析:C++ 获取线程id

    阅读ceph源码过程中需要明确当前操作是由哪个线程发出,此时需要根据线程id来确认线程名称 C++获取线程id是通过系统调用来直接获取 函数描述 头文件:<sys/syscall.h> 函 ...

  5. c++ 获取线程id_5分钟带你完全理解什么是线程

    一.线程概念 介绍概念之前,先画个图吧,依旧是全博客园最丑图,不接受反驳! 简单说明一下:进程在其内部创建线程,线程有自己的PCB,但没有独立的地址空间. 线程和进程具有以下特征和区别: LWP:li ...

  6. java pid 获取句柄_获取进程pid、根据进程pid获取线程pid、获取线程进程句柄

    ======================================= 获取进程pid ======================================= #include &qu ...

  7. 线程id 获取线程名称_016 线程及初步网络编程

    涉及内容:多线程的安全问题.线程的优先级.暂停线程的执行.线程同步.死锁和死锁的解决办法.生产者消费者模式的实现.网络编程三要素.IP端口及Socket的含义 1. 获取线程基本信息的方法 (1) 获 ...

  8. reentrantlock非公平锁不会随机挂起线程?_【原创】Java并发编程系列16 | 公平锁与非公平锁...

    本文为何适原创并发编程系列第 16 篇,文末有本系列文章汇总. 上一篇提到重入锁 ReentrantLock 支持两种锁,公平锁与非公平锁.那么这篇文章就来介绍一下公平锁与非公平锁. 为什么需要公平锁 ...

  9. Linux获取线程id的方法学习

    From: http://www.linuxidc.com/Linux/2014-01/94723.htm 最近一直在想: 如何确认两段代码是不是在同一个线程中执行的呢? 通过查看资料,发现一种比较简 ...

最新文章

  1. string来存放二进制数据
  2. l2-004 这是二叉搜索树吗?_LeetCode 例题精讲 | 11 二叉树转化为链表:二叉树遍历中的相邻结点...
  3. STOP:c0000218 {Registry File Failure}
  4. 前端学习笔记之-VUE框架学习-Vue核心
  5. 软件测试面试的基础题目
  6. 自动驾驶科普:一辆无人车到底是怎样工作的?
  7. 5年后你最想要什么?
  8. Redis持久化_Redis事务_Redis删除策略
  9. .net 发送html邮件,c#利用system.net发送html格式邮件
  10. STM32系列芯片名称定义
  11. C++17 fold expression
  12. spring核心知识点分析
  13. java gc检测工具_Java自带的性能监测工具之jstat
  14. 大数据量下高并发同步
  15. java支付宝提现发请求没反应_支付宝调用页面无法显示
  16. Android 如何开启与关闭adb 的认证机制(google adb secure) (adb RSA 指纹认证)
  17. 扇形面积公式推导过程
  18. 编译原理 | 实验四 | 逆波兰式
  19. 输出每个数字对应的拼音
  20. 如何通过UTON WALLET数字钱包创建和使用你的元宇宙身份

热门文章

  1. Android 系统性能优化(38)---Android内存优化之二:MAT使用进阶
  2. 华为ipop使用教程_华为ipop下载|
  3. win10安装python的xlrd_win10安装python的xlrd
  4. html+css+js实现关键词随机图片
  5. C语言 处理字符串库 string.h
  6. 什么样的人最适合创业?
  7. 腾讯砸1亿斗地主欢乐豆签约前《英雄联盟》电竞职业选手Uzi
  8. 腾讯云游戏新进展:WeGame云游戏功能已落地全国9省市
  9. 美团与饿了么“鸡同鸭讲”后,又可以通过设置继续使用支付宝了?
  10. 三菱电机宣布放弃液晶面板业务 2022年6月停止生产相关模组