多线程的话,如果没有设置每个线程的名字,默认的是进程的名字。为每个线程设置名字,比较好管理和调试
下面的代码显示了如何设置线程的名字:
#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