prctl

理论

// 用 prctl 给线程命名, prctl是个系统调用
#include <sys/prctl.h>
int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5);

实践

#include <zconf.h>
#include <sys/prctl.h>
#include <stdio.h>
#include <pthread.h>void* tmain(void *arg)
{char name[32];prctl(PR_SET_NAME, (unsigned long)"xx");prctl(PR_GET_NAME, (unsigned long)name);printf("%s/n", name);while (1)sleep(1);
}
int main(void)
{pthread_t tid;pthread_create(&tid, NULL, tmain, NULL);pthread_join(tid, NULL);return 0;
}

执行:

$ gcc main.c -l pthread
$ ps aux | grep a.out
oceanst+   9725  0.0  0.0  14704   384 pts/1    Sl+  18:52   0:00 ./a.out
$  ps -L -p 9725PID    LWP TTY          TIME CMD9725   9725 pts/1    00:00:00 a.out9725   9726 pts/1    00:00:00 xx

pthread_setname_np

prctl()只能设置/获取当前线程的名字
在glibc 2.12之后的版本中提供了两个扩展的接口pthread_setname_np()和pthread_getname_np(),可以在进程中设置和读取其他线程的名字。

检查glibc版本:

# getconf GNU_LIBC_VERSION
glibc 2.17

可以使用feature_test_macro_GNU_SOURCE来检查此功能是否可用:

#ifdef _GNU_SOURCEpthread_setname_np(tid, "someName");
#endif

理论

#include <pthread.h>
/*
* 功能值:该pthread_setname_np()函数设置目标线程的名称。由名称指定的缓冲区必须包含一个长度为15个字符或更少的空终止字符串(不包括NULL)。如果名称长度超过15个字符,则多余的字符将被忽略。如果name为null,则该线程变为未命名
* 返回值:成功返回0
*/int pthread_setname_np(pthread_t thread, const char *name);
//获取线程名称
int pthread_getname_np(pthread_t thread, char *name);

实践

#define _MULTI_THREADED
#include <pthread.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>void *threadfunc(void *parm)
{printf("In the thread.\n");sleep(45);  // allow main program to set the thread namereturn NULL;
}int main(int argc, char **argv)
{pthread_t             thread;int                   rc=0;char                  theName[16];memset(theName, 0x00, sizeof(theName));printf("Create thread using the default attributes\n");rc = pthread_create(&thread, NULL, threadfunc, NULL);if(0 == rc){#ifdef _GNU_SOURCErc = pthread_setname_np(thread, "THREADNAMEISTOOLONG");sleep(10);if(0 == rc){rc = pthread_getname_np(thread, theName);if(0 == rc){printf("The thread name is %s.\n", theName);}}
#endifrc = pthread_join(thread, NULL);}if(0 != rc){printf("An error occurred - %d\n", rc);}printf("Main completed\n");return(rc);
}

用prctl给线程命名

Linux C/C++编程:prctl与pthread_setname_np相关推荐

  1. prctl()和pthread_setname_np()函数-设置线程名称

    文章目录 prctl()和pthread_setname_np()函数 pthread.h头文件 简介 c++11 创建线程的三种方法 参考资料 prctl()和pthread_setname_np( ...

  2. Linux下Socket编程

    Linux下Socket编程    网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符.Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的S ...

  3. [转]Linux 的多线程编程的高效开发经验

    Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别.不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断.本文中我们 ...

  4. Linux环境高级编程函数,Linux环境高级编程--出错处理(CLStatus)

    很多程序库对外提供若干类,每个方法出错时如何告知调用者是否出错,以及出错码(在Linux上在error.h中的全局errno就是保存我们Linux程序执行的出错码的)?方法很多,为了简化起见,函数将返 ...

  5. 【linux草鞋应用编程系列】_4_ 应用程序多线程

    一.应用程序多线程 当一个计算机上具有多个CPU核心的时候,每个CPU核心都可以执行代码,此时如果使用单线程,那么这个线程只能在一个 CPU上运行,那么其他的CPU核心就处于空闲状态,浪费了系统资源: ...

  6. Linux下高性能网络编程中的几个TCP/IP选项

    Linux下高性能网络编程中的几个TCP/IP选项 转自:http://blog.chinaunix.net/u/12592/showart.php?id=2064847 最近在新的平台上测试程序,以 ...

  7. 【linux草鞋应用编程系列】_2_ 环境变量和进程控制

    一. 环境变量 应用程序在执行的时候,可能需要获取系统的环境变量,从而执行一些相应的操作. 在linux中有两种方法获取环境变量,分述如下. 1.通过main函数的参数获取环境变量 main函数的多种 ...

  8. linux下多进程编程简介

    两年前的文章,拿过来充充门面. ------------------------ linux下多进程编程简介 ( 作者:mikespook | 发布日期:2002-12-8 | 浏览次数:272 ) ...

  9. [zz]Linux 下 socket 编程示例

    本示例为 Client/Server 结构,通过代码演示 Client 如何建立连接,并向远程端发送数据:Server 端如何侦听系统连接请求,接收请求并建立连接,进而获取客户端发来的数据.代码虽短, ...

  10. 《Linux高性能服务器编程》——导读

    前 言 为什么要写这本书 目前国内计算机书籍的一个明显弊病就是内容宽泛而空洞.很多书籍长篇大论,恨不得囊括所有最新的技术,但连一个最基本的技术细节也无法解释清楚.有些书籍给读者展现的是网络上随处可见的 ...

最新文章

  1. vue-video-player文档_vue的video插件vue-video-player
  2. c语言铁路托运行李费用图,3.为铁路部门编写计算运费的程序。假设铁路托运行李,规定每张客票托运费计算方法是:行李重量不超过50kg...
  3. 使用monkey命令来打开一个app
  4. PTS + ARMS打造性能和应用诊断利器
  5. Java LinkedList公共int indexOf(Object o)方法(带示例)
  6. 解决string字符串关于copy函数的C4996错误
  7. 哔哩哔哩公布2021年度弹幕:“破防了”
  8. 【算法】剑指 Offer 25. 合并两个排序的链表
  9. Java NIO群聊系统
  10. Android 完全退出程序,以及再按一次返回键退出程序
  11. 参考文献的序号怎么对齐_学术论文发表写作格式、具体要求和参考文献的要求模板...
  12. 封装一个帮助类来写文件到android外置存储器上
  13. php连接oracle设定字符集,避免乱码
  14. 理想气体的质量流量计算
  15. Redis使用场景举例
  16. 计算机需要权限来执行此操作 win7,win7系统删除提示“文件夹访问被拒绝,需要权限执行此操作”怎么办...
  17. 西南大学网络与继续教育学院课程考试试题卷
  18. 电脑c盘分区太小如何可以扩大,电脑c盘不够用了,如何给电脑分区
  19. Windows10 微软拼音 翻页按键 设置
  20. gentoo USE 项目解释

热门文章

  1. 航司的客户等级分类及价值分析
  2. 电子政务私有云盘系统建设必备-Mobox政务盘
  3. C++实现求两条直线的交点,以及已知直线外一点求垂足
  4. c1000k 高性能服务器构建技术,C1000K高性能服务器构建技术 (52页)-原创力文档...
  5. 计算机配置时间怎么查,电脑怎么查看系统安装日期 查询电脑系统安装日期及系统运行时间的方法...
  6. color from name
  7. 444句常用英文生活用语
  8. org.springframework.web.bind.MissingRequestHeaderException: Missing request header ‘token‘ for metho
  9. 商场三十六计——第14计 “借尸还魂”
  10. css设置多行超出隐藏