我想设置我的线程名称,我检查我的linux glibc verison是2.12,包含pthread_setname_np API,但是当执行pthread_setname_np时我得到了errno 2,我发现2是ENOENT,意思是“没有这样的文件或目录” 。我不明白。但我发现在同一个代码中,pthread_setname_np在另一个linux系统中返回成功
返回成功的版本信息:
root @ Gzpeak:/ home / wzx / thread#uname -a
Linux Gzpeak 3.13.0-86-generic#130-Ubuntu SMP Mon Apr 18 18:27:15 UTC 2016 x86_64 x86_64 x86_64 GNU / Linux
root @ Gzpeak:/ home / wzx / thread #cat / proc / version
Linux版本3.13.0-86-generic(buildd @ lgw01-19)(gcc版本4.8.2(Ubuntu 4.8.2-19ubuntu1))#130-Ubuntu SMP Mon Apr 18 18:27:15 UTC 2016
root @ Gzpeak:/ home / wzx / thread #getconf GNU_LIBC_VERSION
glibc 2.19
返回错误的版本信息:
[root @ localhost wzx] #uname -a
Linux localhost.localdomain 2.6.32-279.el6.x86_64#1 SMP Wed Jun 13 18:24:36 EDT 2012 x86_64 x86_64 x86_64 GNU / Linux
[root @ localhost wzx] #cat / proc / version
Linux版本2.6.32-279.el6.x86_64(mockbuild@x86-008.build.bos.redhat.com)(gcc版本4.4.6 20120305(Red Hat 4.4.6-4)(GCC))#1 SMP Wed Jun 13 18:24:36 EDT 2012
[root @ localhost wzx] #getconf GNU_LIBC_VERSION
glibc 2.12
请有人告诉我,请你提出任何建议。
答案 0 :(得分:1)
我在proc5页面找到答案,“/proc/[pid]/task/[tid]/comm
”文件仅在linux 2.6.33之后才存在。第二个linux版本是2.6.32,所以pthread_setname_np返回错误,尽管glibc是v2.12。顺便说一句,@ galka感谢您的建议,给我一个找到答案的方法。
答案 1 :(得分:0)
可能你没有或没有开始一个线程或者它已经完成了。
pthread_setname_np无法打开/ proc / self / task / [tid] / comm,然后调用可能会因open(2)中描述的错误之一而失败
系统可以在已加入已终止的线程之后重用线程ID,或者已分离的线程已终止。 POSIX说:“如果应用程序试图使用其生命周期已结束的线程ID,则行为未定义。”