新创建的线程在不设置名称的情况下,默认用的是程序的名称,设置线程名称函数:
#include <pthread.h>
int pthread_setname_np(pthread_t thread, const char *name);
经测试,在Linux 版本为 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 上,其名称最长为16字符(包括了末尾的\0),所以有效字符为15个。
成功时,返回0,失败时返回是非0,但失败时并不会设置errno,所以失败时不能用 errno 来获取相关信息,但失败的情况比较简单,如 man pthread_setname_np 里所说的:
而这个 ERANGE 其值为34,如果像这样加打印,用errno是没有用的。
失败的原因就是设置的线程名称超过允许的长度了,应该保证在15个有效字符内。
程序运行起来后,我们可以用 top -H 来查具体的线程信息,或者用 top -H -p pid 来查看指定进程有关线程信息,如:
线程名称过长,已经被截断。分享一个脚本,用于查看指定程序的进程/线程信息,如下:
#!/bin/sh
if [ $# != 1 ]; then
echo "Usage: $0 app_name"
exit
fi
app_name=$1
function top_app
{
echo "top process $1"
pid=`pidof $1`
if [ "${pid}" != "" ]; then
top -H -p ${pid}
else
echo "no such process of ${app_name}"
fi
}
top_app ${app_name}