美文网首页
pthread_setname_np设置线程名失败原因分析

pthread_setname_np设置线程名失败原因分析

作者: seekting | 来源:发表于2023-07-21 15:23 被阅读0次

pthread_setname_np函数源码

int pthread_setname_np(pthread_t thread, const char *name)
{
    int fd, cs, status = 0;
    char f[sizeof "/proc/self/task//comm" + 3*sizeof(int)];
    size_t len;
    //以下如果要设置的线程名超过15个则设置失败
    if ((len = strnlen(name, 16)) > 15) return ERANGE;
    if (thread == pthread_self())
        return prctl(PR_SET_NAME, (unsigned long)name, 0UL, 0UL, 0UL) ? errno : 0;
    snprintf(f, sizeof f, "/proc/self/task/%d/comm", thread->tid);
    pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
    if ((fd = open(f, O_WRONLY|O_CLOEXEC)) < 0 || write(fd, name, len) < 0) status = errno;
    if (fd >= 0) close(fd);
    pthread_setcancelstate(cs, 0);
    return status;
}

从源码来看,设置的线程名如果长度>15,则会返回ERANGE错误码,否则才会调用prctl(PR_SET_NAME)设置线程名,如果设置失败的话,会使用父线程名;因为子线程是从父线程clone出来的,线程名会默认继承父线程名。

if ((len = strnlen(name, 16)) > 15) return ERANGE;

总结

  1. 使用pthread_setname_np设置线程名要注意字符长度,包含“\0”不能超过16个
  2. 可以根据返回值来判断设置成功或失败
  3. 也可以用系统调用prctl(PR_SET_NAME)函数设置线程名,但也要注意字符不能超过16个

相关文章

  • linux手册翻译——pthread_setname_np(3)

    pthread_setname_np, pthread_getname_np :设置/获取线程的名称 编译和链接需...

  • 失败原因分析

    今天驾考科目二补考又挂科了,这一次挂科让我意想不到,感觉还有点莫名其妙。 刚开始分析是因为昨天模拟考试不理想影响了...

  • Java线程池如何设置

    想要正确地设置线程池大小,需要分析计算环境、资源预算和分析任务的特性等,防止线程池设置过大或者过小。 一般来说,对...

  • 《思考致富》失败的31项主要原因

    我曾分析过数千名对象,其中98%归于失败者的行列,我分析表明,失败有三十一项主要原因: 1.先天不足。先天有智力缺...

  • jmeter通过参数传递多用户的并发测试

    1.添加线程组(thread group),设置线程名和线程数number of threads(即并发用户数) ...

  • 2020-03-19-Java

    1.Thread——设置线程名称、获取线程名称。 当分析线程运行情况时,如何区分不同的线程?通过线程名称来区分不同...

  • 全面分析失败原因

    全面分析原因 客观原因 001 大家在完成考核准备期间还有其他任务要承担,导致大部分人比较累; 002 单位目前整...

  • 最近失败原因分析

    佛家讲究因果,讲究来世轮回。我不信轮回,相信因果。 这里的的因果不是来世因果,而是一个事情的前因后果。 就像最近写...

  • Java线程<第一篇>:Thread生命周期和构造方法

    (1)线程的生命周期 (2)线程的命名 如果没有主动给线程设置名称,那么线程会有默认的名称,比如: 没有默认线程名...

  • #改变社#晨论20171218

    晨论 流程: 各自的改变,成功或者失败。分析原因。(未来可以延伸为上一周的改变,成功或者失败,分析原因) 大家对于...

网友评论

      本文标题:pthread_setname_np设置线程名失败原因分析

      本文链接:https://www.haomeiwen.com/subject/uwetpdtx.html