设置线程的名字

多线程的话,如果没有设置每个线程的名字,默认的是进程的名字。为每个线程设置名字,比较好管理和调试

下面的代码显示了如何设置线程的名字:

#include <stdio.h>
#include <pthread.h>
#include <sys/prctl.h>

void *foo(void *arg)
{
	int idx = arg;
	printf("idx = %d\n", idx);
	switch(idx)
	{
		case 1:
		prctl(PR_SET_NAME, "ThreadName1");
		break;
		case 2:
		prctl(PR_SET_NAME, "ThreadName2");
		break;
		case 3:
		prctl(PR_SET_NAME, "ThreadName3");
		break;
		default:
		break;
	}

	sleep(50);
	return 0;
}

int main(void)
{
	pthread_t threadIdx[3];
	int threadArgIdx[] = {1, 2, 3};
	
	int i;
	for(i = 0; i < 3; i++)
	{
		pthread_create(threadIdx + i, NULL, foo, (void *)threadArgIdx[i]);
	}

	for(i = 0; i < 3; i++)
	{
		pthread_join(threadIdx[i], NULL);
	}
	return 0;
}

编译,执行:

charles@taotao:~$ ./a.out  &
[1] 6705
charles@taotao:~$ ps -eL -o pid,user,lwp,comm
  PID USER       LWP COMMAND
    1 root         1 init
    2 root         2 kthreadd
    3 root         3 ksoftirqd/0
 3965 charles   3965 pager
 6206 root      6206 kworker/2:0
 6250 root      6250 kworker/1:1
 6251 root      6251 kworker/3:2
 6477 root      6477 kworker/0:0
 6558 root      6558 kworker/0:2
 6575 root      6575 kworker/u:2
 6655 root      6655 kworker/0:1
 6699 root      6699 kworker/u:0
 6705 charles   6705 a.out
 6705 charles   6706 ThreadName1
 6705 charles   6707 ThreadName2
 6705 charles   6708 ThreadName3
 6709 charles   6709 ps
或者,top -p {pid},然后按 H:

top - 01:26:32 up  2:47,  3 users,  load average: 0.26, 0.45, 0.58
Tasks:   4 total,   0 running,   4 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.0%us,  0.6%sy,  0.0%ni, 97.1%id,  0.3%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4080452k total,  3804064k used,   276388k free,   711012k buffers
Swap:  1999868k total,        0k used,  1999868k free,  2450684k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                       
 6722 charles   20   0 26836  316  248 S  0.0  0.0   0:00.00 a.out                                         
 6723 charles   20   0 26836  316  248 S  0.0  0.0   0:00.00 ThreadName1                                   
 6724 charles   20   0 26836  316  248 S  0.0  0.0   0:00.00 ThreadName2                                   
 6725 charles   20   0 26836  316  248 S  0.0  0.0   0:00.00 ThreadName3        



你可能感兴趣的:(设置线程的名字)