Linux C/C++ 获取进程号、线程号和设置线程名

Linux开发过程中,设计多线程开发时可以将进程和线程的 id 打印出来,方便开发调试和后期查问题使用,同时也包括设置线程名。

2.1 进程ID

#include <unistd.h>

pid_t getpid(void);</unistd.h>

2.2 线程ID

Linux中,每个进程有一个pid,类型pid_t,由 getpid()取得。Linux下的POSIX线程也有一个id,类型 pthread_t,由pthread_self()取得,该id由线程库维护,其id空间是各个进程独立的(即不同进程中的线程可能有相同的id)。Linux中的POSIX线程库实现的线程其实也是一个进程(LWP),只是该进程与主进程(启动线程的进程)共享一些资源而已,比如代码段,数据段等。

由于 gettid()在 glibc 中未实现该函数,因此我们自己可以通过 Linux 的系统调用 syscall 实现

#include <sys unistd.h>

#define gettid() syscall(__NR_gettid)

/* &#x7B2C;&#x4E8C;&#x79CD; */
#include <sys syscall.h>

#define gettid() syscall(SYS_gettid)  // #define SYS_gettid __NR_gettid &#x5728; sys/syscall.h &#x4E2D;&#x5B9A;&#x4E49;</sys></sys>

当只有一个线程的时候,返回的是pid。

2.3 设置线程名

#include <prctl.h>

prctl(PR_SET_NAME, "testThread");

// &#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x8BBE;&#x7F6E; PR_GET_NAME &#x83B7;&#x53D6;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x7684;&#x540D;&#x5B57;</prctl.h>

2.4 示例

需要在线程函数中调用

#include <sys prctl.h>
#include <sys syscall.h>
#include <unistd.h>
#include <thread>
#include <stdio.h>
#include <string.h>

#define gettid() syscall(SYS_gettid)

void TestThreadBody(int threadNumber)
{
    char szThreadName[20];

    snprintf(szThreadName, 20, "testThread-%d", threadNumber);
    prctl(PR_SET_NAME, szThreadName);

    memset(szThreadName, 0, 20);
    prctl(PR_GET_NAME, szThreadName);

    printf("Thread[%s] pid:%u, tid:%u\n", szThreadName, (unsigned int)getpid(), (unsigned int)gettid());
}

int main()
{
    char szThreadName[20];
    prctl(PR_SET_NAME, "mainThread");
    prctl(PR_GET_NAME, szThreadName);
    printf("Thread[%s] pid:%u, tid:%u\n", szThreadName, (unsigned int)getpid(), (unsigned int)gettid());

    std::thread(TestThreadBody, 1).detach();
    std::thread(TestThreadBody, 2).detach();
    std::thread(TestThreadBody, 3).detach();

    return 0;
}</string.h></stdio.h></thread></unistd.h></sys></sys>

Original: https://www.cnblogs.com/const-zpc/p/16434027.html
Author: 大橙子疯
Title: Linux C/C++ 获取进程号、线程号和设置线程名

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581954/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 数字证书工作原理 图文并茂

    SSL证书和HTTPS的关系 HTTPS在HTTP的基础上加入了SSL加密协议,HTTP是明文传输,HTTPS是加密传输。 A quick definition:HTTPS sta…

    Linux 2023年6月6日
    0115
  • RPA SAP财务内部对账机器人

    bash;gutter:true;【简介】本机器人用于使用SAP软件的集团公司间往来对账前台登录SAP账户和密码,需退出PC微信,输入法切换为英文半角状态。【详细流程】1、清空Ex…

    Linux 2023年6月7日
    0123
  • JMeter压测出现“the target server failed to respond“的解决办法

    压测接口的时候,遇到了这个问题,在网上找到解决方案,试一下还挺管用,800并发没改前20%以上的报错率,改完800并发0.00%报错率。 感谢曲健老师的分享 解决方案如下: 修改执…

    Linux 2023年6月8日
    086
  • Apache手动安装教程及报错解决梳理

    下载地址(例):wget https://dlcdn.apache.org/httpd/httpd-2.4.54.tar.gz 创建安装目录:mkdir /usr/local/ap…

    Linux 2023年6月6日
    082
  • 记一次PowerShell配合Metersploit的艰难提权

    0x01 环境准备 kali(模拟公网攻击机) Windows2008(靶机,装有360、火绒、安全狗、D盾) Powersploit(PowerShell攻击框架) https:…

    Linux 2023年5月28日
    085
  • 虚拟机网络地址配置你不知道的事儿-服务器的种类

    想必大家在初学Linux过程中,应该都是跟我一样白嫖一台虚拟机进行使用把,但是在大家白嫖的同时知不知道我们公司内是使用的什么样的服务器呢?公司肯定不会跟我们一样在自己电脑进行安装虚…

    Linux 2023年6月14日
    0132
  • QLabel文字内容行间距

    故事背景:最近做项目升级,需要界面上展示升级更新内容,用QLabel展示,字符串是这样的”1、XXXXXXX;2、XXXXXXX;3、XXXXXXX”,一个…

    Linux 2023年6月13日
    0100
  • ASP.NET Core 3.0 : 二十五. TagHelper

    什么是TagHelper?这是ASP.NET Core 中新出现的一个名词,它的作用是使服务器端代码可以在Razor 文件中参与创建和呈现HTML 元素。(ASP.NET Core…

    Linux 2023年6月7日
    0100
  • NO.6 HTML+CSS 笔记

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    0102
  • 经典算法学习-计算汉明权重 SWAR(SIMD within a register)

    计算汉明权重算法 SWAR(SIMD within a register) 参考文章: [1] 简书:计算汉明权重的SWAR(SIMD within a Register)算法ht…

    Linux 2023年6月6日
    081
  • zabbix快速安装(yum)

    1、先卸载系统自带数据库 [root@bogon ~]# rpm -e mariadb-libs-5.5.56-2.el7.x86_64 –nodeps 2、安装mys…

    Linux 2023年6月6日
    088
  • CH9344 Windows驱动安装与GPIO使用教程

    USB 转四串口芯片 CH9344 用于为 USB 主机扩展 4 路高速异步串口,支持串口波特率高达 12Mbps。芯片内部高度集成,外围精简,提供 VIO 电源引脚,部分串口 I…

    Linux 2023年6月7日
    089
  • python一键探测编码

    程序功能 按文件输出编码or按编码输出文件 源码 主要代码功能 1.实现文件遍历 2.chardet获取编码 3.传参,对符合编码条件的文件输出 4.打开文件夹选择对话框 程序功能…

    Linux 2023年6月7日
    0127
  • 那些shellcode免杀总结

    首发先知: https://xz.aliyun.com/t/7170 自己还是想把一些shellcode免杀的技巧通过白话文、傻瓜式的文章把技巧讲清楚。希望更多和我一样web狗也能…

    Linux 2023年5月28日
    081
  • n的阶乘前100项。Table of n! for n = 1..100

    n的阶乘前100项 {1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,871782…

    Linux 2023年6月6日
    084
  • DHCP服务

    一、dhcp介绍 dhcp 应用层协议 动态主机配置协议 作用: 为主机动态分配tcp/ip参数(ip地址、掩码、网关、DNS服务器地址) Linux实现dhcp服务 软件: dh…

    Linux 2023年6月7日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球