Linux线程命名

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

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

 

  1. #include <stdio.h>   
  2. #include <pthread.h>   
  3. #include <sys/prctl.h>   
  4.   
  5. void *foo(void *arg)  
  6. {  
  7.     int idx = arg;  
  8.     printf("idx = %d\n", idx);  
  9.     switch(idx)  
  10.     {  
  11.         case 1:  
  12.         prctl(PR_SET_NAME, "ThreadName1");  
  13.         break;  
  14.         case 2:  
  15.         prctl(PR_SET_NAME, "ThreadName2");  
  16.         break;  
  17.         case 3:  
  18.         prctl(PR_SET_NAME, "ThreadName3");  
  19.         break;  
  20.         default:  
  21.         break;  
  22.     }  
  23.   
  24.     sleep(50);  
  25.     return 0;  
  26. }  
  27.   
  28. int main(void)  
  29. {  
  30.     pthread_t threadIdx[3];  
  31.     int threadArgIdx[] = {1, 2, 3};  
  32.       
  33.     int i;  
  34.     for(i = 0; i < 3; i++)  
  35.     {  
  36.         pthread_create(threadIdx + i, NULL, foo, (void *)threadArgIdx[i]);  
  37.     }  
  38.   
  39.     for(i = 0; i < 3; i++)  
  40.     {  
  41.         pthread_join(threadIdx[i], NULL);  
  42.     }  
  43.     return 0;  
  44. }  
#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;
}


编译,执行:

 

 

  1. charles@taotao:~$ ./a.out  &  
  2. [1] 6705  
charles@taotao:~$ ./a.out  &
[1] 6705
  1. charles@taotao:~$ ps -eL -o pid,user,lwp,comm  
  2.   PID USER       LWP COMMAND  
  3.     1 root         1 init  
  4.     2 root         2 kthreadd  
  5.     3 root         3 ksoftirqd/0  
  6.  3965 charles   3965 pager  
  7.  6206 root      6206 kworker/2:0  
  8.  6250 root      6250 kworker/1:1  
  9.  6251 root      6251 kworker/3:2  
  10.  6477 root      6477 kworker/0:0  
  11.  6558 root      6558 kworker/0:2  
  12.  6575 root      6575 kworker/u:2  
  13.  6655 root      6655 kworker/0:1  
  14.  6699 root      6699 kworker/u:0  
  15.  6705 charles   6705 a.out  
  16.  6705 charles   6706 ThreadName1  
  17.  6705 charles   6707 ThreadName2  
  18.  6705 charles   6708 ThreadName3  
  19.  6709 charles   6709 ps  
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:

 

 

  1. top - 01:26:32 up  2:47,  3 users,  load average: 0.26, 0.45, 0.58  
  2. Tasks:   4 total,   0 running,   4 sleeping,   0 stopped,   0 zombie  
  3. 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  
  4. Mem:   4080452k total,  3804064k used,   276388k free,   711012k buffers  
  5. Swap:  1999868k total,        0k used,  1999868k free,  2450684k cached  
  6.   
  7.   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                         
  8.  6722 charles   20   0 26836  316  248 S  0.0  0.0   0:00.00 a.out                                           
  9.  6723 charles   20   0 26836  316  248 S  0.0  0.0   0:00.00 ThreadName1                                     
  10.  6724 charles   20   0 26836  316  248 S  0.0  0.0   0:00.00 ThreadName2                                     
  11.  6725 charles   20   0 26836  316  248 S  0.0  0.0   0:00.00 ThreadName3          
posted @ 2014-10-29 20:02  general001  阅读(2015)  评论(0)    收藏  举报