我想设置我的线程名称,并检查我的linux glibc版本是2.12,包括pthread_setname_np API,但是当执行pthread_setname_np时我得到了errno 2,我发现2是ENOENT,意思是“无此文件或目录”。我不明白。但是我发现在我的相同代码中,pthread_setname_np在另一个linux系统中返回成功。
回报成功的版本信息:
根@ Gzpeak:/家庭/ WZX /线程#UNAME -a
Linux的Gzpeak 3.13.0-86泛型#130 Ubuntu的SMP周一4月18日18:27 :15 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
root @ Gzpeak:/ home/wzx/thread#cat/proc/version
Linux version 3.13.0-86-generic(buildd @ lgw01-19)(gcc version 4.8 0.2(Ubuntu的4.8.2-19ubuntu1))#130-Ubuntu的SMP星期一年04月18 18点27分15秒UTC 2016
根@ Gzpeak:/家庭/ WZX /线程#getconf GNU_LIBC_VERSION
的glibc 2.19
返回错误的版本信息:
[根@本地WZX] #uname -a
的Linux的localhost.localdomain 2.6.32-279.el6.x86_64#1 SMP周三6月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([email protected] )(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
请有人告诉我,坦克你的任何意见。pthread_setname_np失败,errno是2
1
A
回答
1
我找到了答案在proc5页的 “的/ proc/[PID] /任务/ [TID]/COM” 文件只存在由于Linux 2.6.33。第二个linux版本是2.6.32,所以pthread_setname_np返回错误,虽然glibc是v2.12。顺便说一句,@galka感谢您的建议,给我一种方法来找到答案。
0
也许你没有或没有启动一个线程或它已经完成。
pthread_setname_np fails to open /proc/self/task/[tid]/comm, then the call may fail with one of the errors described in open(2)
The system may reuse a thread ID after a terminated thread has been joined, or a detached thread has terminated. POSIX says: "If an application attempts to use a thread ID whose lifetime has ended, the behavior is undefined."
相关问题
- 1. 挂载失败,errno是20?
- 2. 何时打开(2)errno == EMLINK失败?
- 3. IOError:[Errno socket error] [Errno 11004] getaddrinfo失败
- 4. IPv6:connect()总是失败,errno 22
- 5. inotify_add_watch失败,出现errno ESUCCESS
- 6. socket.gaierror:[Errno 11001] getaddrinfo失败
- 7. mmap> 1GB失败,errno 12
- 8. ServerSelectionTimeoutError errno 11001 getaddrinfo失败python
- 9. (python)[Errno 11001] getaddrinfo失败
- 10. socket()失败 - errno EPERM - ubuntu
- 11. SSL_Connection失败,并且errno = 2时出现SSL_ERROR_SYSCALL?
- 12. 连接失败:localhost(Errno :: ECONNREFUSED:连接被拒绝 - 连接(2))
- 13. <urlopen错误[errno 11001] getaddrinfo失败>
- 14. android mmap失败:无效参数(errno 22)
- 15. ruby bundle安装失败(Errno :: EEXIST)
- 16. Python ex_setup.py urlopen错误[Errno 11004] getaddrinfo失败
- 17. Errno 10060连接尝试失败
- 18. urlopen错误[Errno 11001] getaddrinfo失败
- 19. 套接字绑定失败errno = 99
- 20. errno的10109点的getaddrinfo失败返回
- 21. Phonegap添加插件失败(errno 34)*/plugin.xml
- 22. mySQL 5.5.17/Workbench 5.2同步失败(errno:150)
- 23. 绑定套接字与errno失败88
- 24. 为什么getcwd失败errno ENOENT
- 25. Python SSL wrap_socket失败,SSLError错误,Errno 336265218
- 26. Heroku Dep问题:SSH,PubKey失败(Errno :: EISDIR)
- 27. 我的C file_exists函数使用stat总是失败errno = ENOENT
- 28. 什么是fgets失败时使用的最准确的errno val?
- 29. FileNotFoundError:[Errno 2]
- 30. 验证失败2
我发现我的代码在另一个linux系统中工作,我给了他们两个版本信息在我的问题中,你能给我更多的建议吗? – husker
所以你说你在新的内核和glibc上取得成功。手册页说glibc 2.12。 http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html中有一个示例程序。你有没有在第二台Linux上运行它?如果它没有失败,那么你在程序中做错了,如果它确实有不同的故事。不用看看你的代码,我可能会建议:尝试调试你的程序:用strace -fp,gdb,在启动线程之前和之后做一些printfs,完成线程,更改名称,添加一些sleep()到线程,确保当你在'不幸'的Linux系统上更改它的名字时它仍然活着。 – galka
我发现你的建议的答案,第二个Linux版本是2.6.32,“/ proc/[pid] /任务/ [tid]/com”文件只存在自2.6.33。感谢您的建议。 – husker