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

这篇具有很好参考价值的文章主要介绍了Linux C/C++ 获取进程号、线程号和设置线程名。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 前言

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

2 函数及头文件

2.1 进程ID

#include <unistd.h>

pid_t getpid(void);

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)

/* 第二种 */
#include <sys/syscall.h>

#define gettid() syscall(SYS_gettid)  // #define SYS_gettid __NR_gettid 在 sys/syscall.h 中定义

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

2.3 设置线程名

#include <prctl.h>

prctl(PR_SET_NAME, "testThread"); 

// 可以通过设置 PR_GET_NAME 获取当前线程的名字

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;
}

原文链接:「链接」

原文链接

Linux C/C++ 获取进程号、线程号和设置线程名-QT开发中文网Linux C/C++ 获取进程号、线程号和设置线程名https://qt.0voice.com/?id=1006文章来源地址https://www.toymoban.com/news/detail-669469.html

到了这里,关于Linux C/C++ 获取进程号、线程号和设置线程名的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 多线程( 进程VS线程 | 线程控制 )

    进程是资源分配的基本单位。 线程是OS调度的基本单位。 线程共享进程数据,但也拥有自己的一部分数据: 线程ID 一组寄存器 ,用来保存每个线程的上下文数据,让每个线程能够合理调度。 栈 ,每个线程入栈出栈产生的临时变量必须保存到每个线程的私有栈中,所以栈对于

    2024年02月07日
    浏览(44)
  • 【linux命令讲解大全】076.pgrep命令:查找和列出符合条件的进程ID

    根据用户给出的信息在当前运行进程中查找并列出符合条件的进程ID(PID) 补充说明 pgrep 命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程ID。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个

    2024年02月09日
    浏览(41)
  • Linux--进程多线程(上)

            精神内耗一方面可能是消极的,人好像一直在跟自己过不去,但其实它也是一种积极的情绪。精神内耗在某种程度上,是在寻找一种出口,寻找他自己人生的出口,寻找我今天的出口,或者寻找我一觉醒来明天的出口。我们从积极的角度谈论的话,精神内耗不是一个

    2023年04月17日
    浏览(39)
  • Linux和windows进程同步与线程同步那些事儿(五):Linux下进程同步

    Linux和windows进程同步与线程同步那些事儿(一) Linux和windows进程同步与线程同步那些事儿(二): windows线程同步详解示例 Linux和windows进程同步与线程同步那些事儿(三): Linux线程同步详解示例 Linux和windows进程同步与线程同步那些事儿(四):windows 下进程同步 Linux和wi

    2024年02月02日
    浏览(40)
  • Linux和windows进程同步与线程同步那些事儿(三): Linux线程同步详解示例

    Linux和windows进程同步与线程同步那些事儿(一) Linux和windows进程同步与线程同步那些事儿(二): windows线程同步详解示例 Linux和windows进程同步与线程同步那些事儿(三): Linux线程同步详解示例 Linux和windows进程同步与线程同步那些事儿(四):windows 下进程同步 Linux和wi

    2024年02月01日
    浏览(39)
  • Linux的进程,协程和线程

    Linux的进程、协程和线程是计算机科学中重要的概念,它们在操作系统和并发编程中发挥着关键的作用。让我们逐个详解这些概念,并讨论它们之间的关系。 进程是操作系统中的一个执行单元,它包含了程序执行所需的所有资源,如内存空间、文件描述符、寄存器等。 进程是

    2024年01月23日
    浏览(44)
  • 【Linux】 由“进程”过渡到“线程” -- 什么是线程(thread)?

    如何看待地址空间和页表: 地址空间是进程能看到的资源窗口 页表决定,进程真正拥有资源的情况(页表映射多少才是拥有多少) 合理的对地址空间+页表进行资源划分,我们就可以对一个进程所有的资源进行分类 虚拟地址如何找到物理地址: 最后一级页表存放的是页框的起

    2024年02月15日
    浏览(44)
  • 【Linux从入门到精通】线程详解(线程与进程区别)

        本篇文章主要 对线程的概念和线程的控制进行了讲解 。其中我们再次对进程概念理解。同时 对比了进程和线程的区别 。希望本篇文章会对你有所帮助。  文章目录 一、线程概念 1、1 什么是线程 1、2 再次理解进程概念 1、3 轻量级进程 二、进程控制 2、1 创建线程 pt

    2024年02月07日
    浏览(39)
  • Linux系列之查看进程线程的方法

    在window系统查看系统进程,我们一般会使用 Ctrl+Shift+Esc 打开系统进程监控页面,但是在Linux系统查看进程一般使用 top 命令或者 ps 命令,但是如果要查看线程怎么查看?其实也可以使用这两个命令,所以本博客总结一下几种方法 ps命令 Linux的ps命令用于查看进程统计信息 常用

    2024年02月07日
    浏览(42)
  • 对于学习Linux进程与线程的感悟

    进程感觉就像一个应用程序一样,比如QQ,火狐浏览器等等,他们之间互不干扰,可以独立运行。线程就像QQ里的各种功能,比如好友列表,显示当前是在线还是离线,会话窗口等等去实现各种功能,进程死掉的话,这些线程也会跟着结束。 经过一段时间的学习,发现线程方

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包