有没有办法在Linux中设置线程的名称?
我的主要目的是在调试时提供帮助,如果通过例如公开这个名称也很好 /proc/$PID/task/$TID/...
命名线程是有帮助的,这样就可以理清哪些线程正在做什么用于诊断和调试目的.
在多线程应用程序中,线程是否有一个特定的命名约定,它比另一个更好?任何准则?什么样的信息应该进入线程的名称?你有什么了解如何命名你的线程可能对其他人有帮助?
在Windows中,可以通过此代码设置线程名称.然后,线程名将显示在调试器中.
在MacOSX中,我看到了几个提示,表明有线程名称.我认为NSThread类也有一个名称属性.我的目标是我可以在我的C++应用程序中设置threadname并在Xcode/gdb中查看它.
其他相关问题:
是否可以为a命名,boost::thread以便调试器表和崩溃日志更具可读性?怎么样?
通过使用prctl或pthread_set_name_np等函数,可以更改线程的名称.至少在Linux 2.6.38中,两个函数强加的限制是名称不能超过15个字符(NULL终止是第16个字节).
这15个字符的限制在哪里,是否有任何(甚至非正统的)方式?
更新:
正如评论中所提到的,这是由内核强加的.
定义可以在这里找到:http: //lxr.linux.no/linux+v2.6.37/include/linux/sched.h#L245
我需要用C语言修改程序的进程名称.
我确切地说,这不是我想要改变的线程的名称.
我想更改程序的名称,但我找到的唯一解决方案是修改其值argv[0].
我也找到了另一个解决方案prctl(PR_SET_NAME, "newname"),但这个解决方案不起作用.
我刚刚创建了一个关于线程命名约定的SO问题.问题是,"你应该如何命名一个线程?"
回顾过去,线程名称仅在您必须读取线程名称时才有意义.
您是否可以提供真实世界的例子,说明何时必须检查线程并根据其名称辨别它们?这是平台/框架无关的.
你是怎么做的(在什么环境下)?
换句话说,在什么情况下你必须解决问题并且必须按名称检查线程,你是如何实现这一目标的?
我知道我可以设置线程的名称(一个在gdb和HTOP可见)在Linux中使用prctl().但是对于其他操作系统,这很可能不会起作用.此外,我可以尝试使用pthread_setname_np(),这在POSIX系统中更有用,但仍然缺乏完全兼容性.
所以我想有一些更便携的方式,也许是QThread我找不到的东西.有没有这样的方式?